架构师训练营第 0 期第 3 周作业

发布于: 2020 年 06 月 24 日
  1. 手写单例模式



  1. 组合模式编写实例

public abstract class Component {

private String description;

public Component(String description) {
this.description = description;
}

void print() {
System.out.println(description);
}
}

Compent是一个抽象类,作为界面元素的基类,成员变量description则为界面控件元素的名字,print()方法则是一个公用打印控件元素的方法。

public class Leaf extends Component {

public Leaf(String description) {
super(description);
}

}

Leaf类是Component的子类,代表不能在这个控件上再添加其他控件。

public class Composite extends Component {

public Composite(String description) {
super(description);
}

private List<Component> componentList = new ArrayList<>();

public void add(Component component) {
this.componentList.add(component);
}

public void remove(Component component) {
this.componentList.remove(component);
}

public List<Component> getChildren() {
return this.componentList;
}

}

Composite是一个组合类,成员变量componentList包含了所有组合元素,可以通过add(),romove()方法对成员变量componentList进行删除和增加元素。

public class Client {

public static void main(String[] args) {
Composite root = new Composite("WINDOW窗口");
Leaf picture = new Leaf("LOGO图片");
root.add(picture);
Leaf button1 = new Leaf("登录");
root.add(button1);
Leaf button2 = new Leaf("注册");
root.add(button2);
Composite frame = new Composite("FRAME1");
root.add(frame);
Leaf label = new Leaf("用户名");
frame.add(label);
Leaf textBox = new Leaf("文本框");
frame.add(textBox);
Leaf password = new Leaf("密码");
frame.add(password);
Leaf passwordBox = new Leaf("密码框");
frame.add(passwordBox);
Leaf checkbox = new Leaf("复选框");
frame.add(checkbox);
Leaf textBox2 = new Leaf("复选框");
frame.add(textBox2);
Leaf linkLabel = new Leaf("忘记密码");
frame.add(linkLabel);

root.print();
show(root);
}

public static void show(Composite root) {
for (Component component : root.getChildren()) {
component.print();
if (component instanceof Composite) {
show((Composite) component);
}
}
}

}



用户头像

还未添加个人签名 2018.03.20 加入

还未添加个人简介

评论

发布
暂无评论
架构师训练营第 0 期第3周作业