写点什么

架构师训练营 - week03 - 作业 1

用户头像
lucian
关注
发布于: 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(忘记密码)
复制代码


用户头像

lucian

关注

还未添加个人签名 2018.03.13 加入

还未添加个人简介

评论

发布
暂无评论
架构师训练营 - week03 - 作业1