架构师训练营第三周作业
发布于: 2020 年 06 月 22 日
1. 请在草稿纸上手写一个单例模式的实现代码,拍照提交作业。
请用组合设计模式编写程序,打印输出图 1 的窗口,窗口组件的树结构如图 2 所示,打印输出示例参考图 3。
作业:
类图设计
关键类的代码
Component类
public abstract class Component { private String label; public Component(String label) { this.label = label; } public abstract void draw(); public abstract String getType(); public void printInfo() { System.out.println("print " + getType() + "(" + label + ")"); }}
Composite类
public class Composite extends Component { private List<Component> components = new ArrayList<Component>(); public Composite(String label) { super(label); } @Override public void draw() { printInfo(); for (Component c : components) { c.draw(); } } @Override public String getType() { return "Composite"; } public void addComponent(Component component) { components.add(component); }}
Button类
public class Button extends Component { public Button(String label) { super(label); } @Override public void draw() { // do something printInfo(); } @Override public String getType() { return "Button"; }}
WinForm类
public class WinForm extends Composite { public WinForm(String label) { super(label); } @Override public String getType() { return "WinForm"; }}
测试类
public class ComponentTest { public static void main(String[] args) { // 初始化Root窗口 Composite root = new WinForm("WINDOW 窗口"); // 添加图片和按钮组件 root.addComponent(new Picture("LOGO图片")); root.addComponent(new Button("登录")); root.addComponent(new Button("注册")); // 添加Frame组件 Composite frame = new Frame("Frame1"); frame.addComponent(new Lable("用户名")); frame.addComponent(new TextBox("文本框")); frame.addComponent(new Lable("密码")); frame.addComponent(new PasswordBox("密码框")); frame.addComponent(new CheckBox("复选框")); frame.addComponent(new TextBox("记住用户名")); frame.addComponent(new LinkLable("忘记密码")); root.addComponent(frame); // 画图 root.draw(); }}
打印结果
划线
评论
复制
发布于: 2020 年 06 月 22 日阅读数: 94
版权声明: 本文为 InfoQ 作者【W_T】的原创文章。
原文链接:【http://xie.infoq.cn/article/285c6f85a66eb6ef0c5e6cb53】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
W_T
关注
还未添加个人签名 2018.01.09 加入
还未添加个人简介
评论