设计模式第三周作业「架构师训练营第 1 期」
发布于: 2020 年 10 月 03 日
作业一:请在草稿纸上手写一个单例模式的实现代码。
作业二:请用组合设计模式编写程序,打印输出图1的窗口, 窗口组件的树结构如图2所示。
类图如下,定义一个抽像Element类,各个组件继承这个类,对于winForm与Frame为容器类,为整体与部分的关系,所以都有一个元素集合,都使用统一处理逻辑
代码如下
public abstract class Element { protected String id; protected String value; //渲染 public abstract void draw();}public class WinForm extends Element{ List<Element> subNodes = new ArrayList<>(); public WinForm(String value) { this.value = value; } public WinForm(){ } public void addSub(Element element){ subNodes.add(element); } @Override public void draw() { System.out.println("print winForm "+value); for (Element subNode : subNodes) { subNode.draw(); } }}public class Frame extends Element{ List<Element> subNodes = new ArrayList<>(); public Frame(String value) { this.value = value; } public Frame(){ } public void addSub(Element element){ subNodes.add(element); } @Override public void draw() { System.out.println("print frame "+value); for (Element subNode : subNodes) { subNode.draw(); } }}public class Button extends Element{ public Button(String value) { this.value = value; } public Button(){ } @Override public void draw() { System.out.println("print button "+value); }}其它label textbox等组件同buttonpublic class Client { public static void main(String[] args) { WinForm winForm = new WinForm("window窗口"); Picture picture = new Picture("logo图片"); Button loginbtn = new Button("登录"); Button regbtn = new Button("注册"); Frame frame = new Frame("frame1"); Label label = new Label("用户名"); TextBox textBox = new TextBox("文本框"); Label pwdlabel = new Label("密码"); PasswordBox passwordBox = new PasswordBox("密码框"); CheckBox checkBox = new CheckBox("复选框"); Label remeberlabel = new Label("记住用户名"); LinkLabel linkLabel = new LinkLabel("忘记密码"); winForm.addSub(picture); winForm.addSub(loginbtn); winForm.addSub(regbtn); winForm.addSub(frame); frame.addSub(label); frame.addSub(textBox); frame.addSub(pwdlabel); frame.addSub(passwordBox); frame.addSub(checkBox); frame.addSub(remeberlabel); frame.addSub(linkLabel); winForm.draw(); }}
划线
评论
复制
发布于: 2020 年 10 月 03 日 阅读数: 17
版权声明: 本文为 InfoQ 作者【天天向善】的原创文章。
原文链接:【http://xie.infoq.cn/article/fb852a8a4f87ad84e85e4c6ff】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
天天向善
关注
还未添加个人签名 2018.04.27 加入
还未添加个人简介
评论