架构师训练营第三周课后作业

用户头像
Gosling
关注
发布于: 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();
}
}

通过组合模式,利用共同的抽象类把添加和输出行为进行复用,实现程序的扩展。

用户头像

Gosling

关注

还未添加个人签名 2017.10.28 加入

还未添加个人简介

评论

发布
暂无评论
架构师训练营第三周课后作业