架构师训练营: 第三周作业

发布于: 2020 年 06 月 24 日

1. 请在草稿纸上手写一个单例模式的实现代码,拍照提交作业。

2. 请用组合设计模式编写程序,打印输出图 1 的窗口,窗口组件的树结构如图 2 所示,打印输出示例参考图 3。

如图所示:

二话不说上类图:

上代码:

public interface IPrint {
void print();
}

public class Leaf implements IPrint {
private String type;
private String name;
public Leaf(String type, String name) {
this.type = type;
this.name = name;
}
@Override
public void print() {
System.out.println("print "+type+"("+name+")");
}
}

public class Frame implements IPrint {
private String type;
private String name;
private List<IPrint> list = new ArrayList<>();
public Frame(String type,String name) {
this.type = type;
this.name = name;
}
public Frame add(@NotNull IPrint print) {
list.add(print);
return this;
}
@Override
public void print() {
System.out.println("print "+type+"("+name+")");
for (IPrint p :list) {
p.print();
}
}
}

最后主程序:

public class Main {
enum Type{
WinForm,Picture,Button,Frame,Lable,TextBox,PasswordBox,CheckBox,LinkLable;
}
public static void main(String[] args) {
IPrint iPrint = generatorRootPrint();
iPrint.print();
}
public static IPrint generatorRootPrint() {
Frame frame1 = new Frame(Type.Frame.name(), "FRAME1");
frame1.add(new Leaf(Type.Lable.name(), "用户名"))
.add(new Leaf(Type.TextBox.name(), "文本框"))
.add(new Leaf(Type.Lable.name(), "密码"))
.add(new Leaf(Type.PasswordBox.name(), "密码框"))
.add(new Leaf(Type.CheckBox.name(), "复选框"))
.add(new Leaf(Type.TextBox.name(), "记住用户名"))
.add(new Leaf(Type.LinkLable.name(), "忘记密码"));
Frame winFrom=new Frame(Type.WinForm.name(),"WINDOW窗口");
winFrom.add(new Leaf(Type.Picture.name(), "LOGO图片"))
.add(new Leaf(Type.Button.name(), "登录"))
.add(new Leaf(Type.Button.name(), "注册"))
.add(frame1);
return winFrom;
}
}

输出结果图:

作业总结:

在纸上手写代码确实比较生疏,没有编译器的感觉,而且是顺序写的,要先考虑完整,在动笔写会看起来好的多。在ide上不是顺序写的,光标可以随意跳转,在某个地方插入单词。 通过手写代码,发现自己对java代码不是特别熟悉,对ide有比较强的依。

组合模式对树型结构的遍历很方便。不需要单独写遍历树的代码。

用户头像

zcj

关注

还未添加个人签名 2019.10.12 加入

还未添加个人简介

评论

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