架构师训练营 - week03 - 作业 1
发布于: 2020 年 10 月 04 日
1. 请在草稿纸上手写一个单例模式的实现代码,拍照提交作业。
饿汉模式:
懒汉模式:
2. 请用组合设计模式编写程序,打印输出图 1 的窗口,窗口组件的树结构如图 2 所示,打印输出示例参考图 3。
首先构建基础类型
public interface Component {
String getName();
void addList(Component component);
void print(int level);
}
复制代码
构建叶子节点类,其中增加子节点方法不可用。
public class SingleComponent implements Component {
private final String name;
public SingleComponent(String name){
this.name = name;
}
@Override
public String getName() {
return this.name;
}
@Override
public void addList(Component component) {
// 操作不支持
}
@Override
public void print(int level) {
IntStream.range(0, level).forEach(l -> System.out.print(" "));
System.out.println(getName());
}
}
复制代码
增加容器类,允许增加容器或叶子节点
public class ContainerComponent implements Component {
private final String name;
private final List<Component> list = new ArrayList<>();
public ContainerComponent(String name) {
this.name = name;
}
@Override
public void addList(Component component) {
list.add(component);
}
@Override
public String getName() {
return this.name;
}
@Override
public void print(int level) {
IntStream.range(0, level).forEach(l -> System.out.print(" "));
System.out.println(getName());
if (list.size() > 0) {
list.forEach(l -> l.print(level + 1));
}
}
}
复制代码
组装各个容器和叶子节点
public class Main {
public static void main(String[] args) {
Component root = new ContainerComponent("WinForm(WINDOW窗口)");
root.addList(new SingleComponent("Picture(LOGO图片)"));
root.addList(new SingleComponent("Button(登录)"));
root.addList(new SingleComponent("Button(注册)"));
Component frame = new ContainerComponent("Frame(FRAME1)");
root.addList(frame);
frame.addList(new SingleComponent("Label(用户名)"));
frame.addList(new SingleComponent("TextBox(文本框)"));
frame.addList(new SingleComponent("Label(密码)"));
frame.addList(new SingleComponent("PasswordBox(密码框)"));
frame.addList(new SingleComponent("CheckBox(复选框)"));
frame.addList(new SingleComponent("TextBox(记住密码)"));
frame.addList(new SingleComponent("LinkLabel(忘记密码)"));
root.print(0);
}
}
复制代码
运行结果:
WinForm(WINDOW窗口)
Picture(LOGO图片)
Button(登录)
Button(注册)
Frame(FRAME1)
Label(用户名)
TextBox(文本框)
Label(密码)
PasswordBox(密码框)
CheckBox(复选框)
TextBox(记住密码)
LinkLabel(忘记密码)
复制代码
划线
评论
复制
发布于: 2020 年 10 月 04 日阅读数: 36
lucian
关注
还未添加个人签名 2018.03.13 加入
还未添加个人简介
评论