1
架构训练营第三周作业
发布于: 2020 年 11 月 08 日
作业一:
作业内容
请在草稿纸上手写一个单例模式的实现代码。
(拍照提交作业)
解答
作业二:
作业内容
请用组合设计模式编写程序,打印输出图1的窗口,窗口组件的树结构如图2所示。
图1
图2
打印输出示例参考图3。
图三
解答
这里使用JAVA程序实现。先定义一个通用的接口,如下:
public interface Window{ public void print();}
然后定义树枝节点(有子节点),实现接口要求的print方法,并调用其子节点的print方法:
public class Component implements Window { private ArrayList<Window> subComponents = new ArrayList<Window>(); private String name; private String description; public Component(String name,String description) { this.name = name; this.description = description; } // add方法用于添加父子结点关系 public void add(Window component) { this.subComponents.add(component); } public ArrayList<Window> getChild(){ return this.subComponents; } public void print(){ System.out.println("print "+this.name + "(" + this.description+")"); for (Window component:this.subComponents) { component.print(); } }}
定义叶子节点,实现print方法:
public class Leaf implements Window { private String name; private String description; public Leaf(String name,String description) { this.name = name; this.description = description; } public void print(){ System.out.println("print "+this.name + "(" + this.description+")"); }}
调用代码如下:
public static void main(String[] args) { // 定义所有节点 Component winForm = new Component("WinForm","WINDOW窗口"); Component frame = new Component("Frame","FRAME1"); Leaf picture = new Leaf("Picture","LOGO图片"); Leaf buttonLogIn = new Leaf("Button","登录"); Leaf buttonRegister = new Leaf("Button","注册"); Leaf lableUserName = new Leaf("Lable","用户名"); Leaf userNameTextbox = new Leaf("TextBox","文本框"); Leaf lablePassword = new Leaf("Lable","密码"); Leaf passowrdTextbox = new Leaf("TextBox","密码框"); Leaf checkBox = new Leaf("CheckBox","复选框"); Leaf lableRemember = new Leaf("Lable","记住用户名"); Leaf link = new Leaf("LinkLable","忘记密码"); // 按照层次关系,把叶子节点放入其父节点 winForm.add(picture); winForm.add(buttonLogIn); winForm.add(buttonRegister); winForm.add(frame); frame.add(lableUserName); frame.add(userNameTextbox); frame.add(lablePassword); frame.add(passowrdTextbox); frame.add(checkBox); frame.add(lableRemember); frame.add(link); winForm.print(); }
运行程序,打印结果如下:
打印结果
划线
评论
复制
发布于: 2020 年 11 月 08 日阅读数: 78
版权声明: 本文为 InfoQ 作者【一期一会】的原创文章。
原文链接:【http://xie.infoq.cn/article/0d88c0bf684d6725e0db91636】。文章转载请联系作者。
一期一会
关注
还未添加个人签名 2018.01.08 加入
还未添加个人简介
评论 (1 条评论)