架构师训练营 - 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 加入
还未添加个人简介











评论