第三周作业
发布于: 2020 年 06 月 22 日
作业一:
1. 请在草稿纸上手写一个单例模式的实现代码,拍照提交作业。
2. 请用组合设计模式编写程序,打印输出图 1 的窗口,窗口组件的树结构如图 2 所示,打印输出示例参考图
输出结果:
+print WinForm (WINDOW窗口) -print Picture(Logo图片) -print Button(登录) -print Button(注册) +print Frame(FRAME1) -print Lable(用户名) -print TextBox(文本框) -print Lable(密码) -print PasswordBox(密码框) -print CheckBox(复选框) -print TextBox(记住用户名) -print LinkLable(忘记密码)
执行方法:
public class Client { public static void main(String[] args){ Composite window = new Composite("print WinForm (WINDOW窗口)"); Leaf picture = new Leaf("print Picture(Logo图片)"); Leaf loginButton = new Leaf("print Button(登录)"); Leaf registerButton = new Leaf("print Button(注册)"); Composite fream1 = new Composite("print Frame(FRAME1)"); Leaf userNameLable = new Leaf("print Lable(用户名)"); Leaf textBox = new Leaf("print TextBox(文本框)"); Leaf passwordLable = new Leaf("print Lable(密码)"); Leaf passwordBox = new Leaf("print PasswordBox(密码框)"); Leaf checkBox = new Leaf("print CheckBox(复选框)"); Leaf rememberUserNametextBox = new Leaf("print TextBox(记住用户名)"); Leaf forgetLinkLable = new Leaf("print LinkLable(忘记密码)"); window.addChild(picture); window.addChild(loginButton); window.addChild(registerButton); window.addChild(fream1); fream1.addChild(userNameLable); fream1.addChild(textBox); fream1.addChild(passwordLable); fream1.addChild(passwordBox); fream1.addChild(checkBox); fream1.addChild(rememberUserNametextBox); fream1.addChild(forgetLinkLable); String prefix = " "; window.printComponent(prefix); }}
组件的抽象接口
/** * 组件抽象类 * @author: songdewei * @date: 2020/6/22 */public interface Component { /** * 打印组件信息 * @param prefix 前缀 */ void printComponent(String prefix);}
组合的实现类
public class Composite implements Component{ /** * 节点名称 */ private String name; /** * 子节点名称 */ private List<Component> children = new ArrayList<>(); public Composite(String name) { this.name = name; } /** * 增加一个子组件 * @param child 子构件对象 */ public void addChild(Component child){ children.add(child); } @Override public void printComponent(String prefix) { System.out.println(prefix + "+" + name); if(null != children){ for(Component c : children){ c.printComponent(prefix + prefix); } } }}
叶子节点的实现类
/** * 叶子节点 * @author: songdewei * @date: 2020/6/22 */public class Leaf implements Component{ /** * 叶子节点名称 */ private String name; public Leaf(String name){ this.name = name; } @Override public void printComponent(String preStr) { System.out.println(preStr + "-" + name); }}
划线
评论
复制
发布于: 2020 年 06 月 22 日阅读数: 63
版权声明: 本文为 InfoQ 作者【戴维斯】的原创文章。
原文链接:【http://xie.infoq.cn/article/b435812303fcaf5512d489b19】。未经作者许可,禁止转载。
戴维斯
关注
还未添加个人签名 2018.08.24 加入
还未添加个人简介
评论