架构师训练营第三周课后作业
发布于: 2020 年 10 月 08 日
手写单例模式
请用组合设计模式编写程序,打印输出图1的窗口,窗口组件的树结构如图2所示。
抽象类Component
public abstract class Component { private String name; private List<Component> componentList = new ArrayList<Component>(); public void addComponent(Component component) { componentList.add(component); } public void print() {; System.out.println(name); if(componentList.size() > 0) { for(Component component : componentList) { component.print(); } } } public String getName() { return name; } public void setName(String name) { this.name = name; } public List<Component> getComponentList() { return componentList; } public void setComponentList(List<Component> componentList) { this.componentList = componentList; }}
抽象类中定义组件的公共行为和属性,包括定义一个标识(name)、内部的组件(componentList)添加行为(addComponent)和打印组件(print)。
WinForm类
public class WinForm extends Component{}
Picture类
public class Picture extends Component{ }
Button类
public class Button extends Component{}
Frame类
public class Frame extends Component{}
Lable类
public class Lable extends Component{}
TextBox类
public class TextBox extends Component{}
PasswordBox类
public class PasswordBox extends Component{}
CheckBox类
public class CheckBox extends Component{}
LinkLable类
public class LinkLable extends Component{}
测试输出示例
public class CompositionDemo { public static void main(String[] args) { WinForm winform = new WinForm(); winform.setName("WINDOW窗口"); Picture picture = new Picture(); picture.setName("LOGO图片"); Button button1 = new Button(); button1.setName("登录"); Button button2 = new Button(); button2.setName("注册"); Frame frame = new Frame(); frame.setName("FRAME1"); winform.addComponent(picture); winform.addComponent(button1); winform.addComponent(button2); winform.addComponent(frame); Lable lable1 =new Lable(); lable1.setName("用户名"); TextBox textBox = new TextBox(); textBox.setName("文本框"); Lable lable2 =new Lable(); lable2.setName("密码"); PasswordBox passwordBox = new PasswordBox(); passwordBox.setName("密码框"); CheckBox checkBox = new CheckBox(); checkBox.setName("复选框"); Lable lable3 = new Lable(); lable3.setName("记住用户名"); LinkLable linkLable = new LinkLable(); linkLable.setName("忘记密码"); frame.addComponent(lable1); frame.addComponent(textBox); frame.addComponent(lable2); frame.addComponent(passwordBox); frame.addComponent(checkBox); frame.addComponent(lable3); frame.addComponent(linkLable); winform.print(); }}
通过组合模式,利用共同的抽象类把添加和输出行为进行复用,实现程序的扩展。
划线
评论
复制
发布于: 2020 年 10 月 08 日 阅读数: 16
Gosling
关注
还未添加个人签名 2017.10.28 加入
还未添加个人简介
评论