架构师训练营第三周作业
发布于: 2020 年 06 月 23 日
1、请在草稿纸上手写一个单例模式的实现代码,拍照提交作业。
在白纸上写这么一段代码。真的很费力哈。{}都忘记打了。字有点丑见笑了。
2、请用组合设计模式编写程序,打印输出图 1 的窗口,窗口组件的树结构如图 2 所示,打印输出示例参考图 3。
1)先上需求UML类图
2)什么是组合模式
组合是一种对象的结构模式。
Element 抽象构件:组合中的对象声明接口,在适当的情况下,实现所有类共有接口的默认行为。
Node 树枝构件:是组合中的分支节点对象,它有子节点。树枝构件类给出所有的管理子对象的方法,如add()。
Leaf 树叶构件:叶子对象,叶子结点没有子结点。
3)代码实现
public interface Element { /** * 渲染 */ public void render();}public class Node implements Element { private Widget widget; private List<Element> subList = new LinkedList<Element>(); public Node(Widget widget) { this.widget = widget; } @Override public void render() { System.out.println("渲染组件:"+widget.getName()+",内容:"+ widget.getContent()); for(Element widget: subList) { widget.render(); } } public void add(Element obj) { subList.add(obj); }}public class Leaf implements Element { private Widget widget; public Leaf(Widget widget) { this.widget = widget; } public void render() { System.out.println("渲染组件:"+widget.getName()+",内容:"+ widget.getContent()); }}
//界面组件定义
public interface Widget { /** * 获取组件名称 * @return */ public String getName(); /** * 获取组件渲染内容 * @return */ public String getContent(); }public abstract class AbWidget implements Widget { private String content; public AbWidget(String content) { this.content = content; } @Override public abstract String getName(); @Override public String getContent() { return this.content; }}public class Button extends AbWidget { public Button(String content) { super(content); // TODO Auto-generated constructor stub } @Override public String getName() { return "Button"; } }// CheckBox 、Frame、Lable、LinkLable、PasswordBox、Picture、TextBox、WindowsForm 同Button实现类似,// 唯一的区别是getName返回一样
//调用
public class Windows { public static void main(String[] args) { Node windows = new Node(new WindowForm("WINDOWS窗口")); windows.add(new Leaf(new Picture("LOGO图片"))); windows.add(new Leaf(new Button("登录"))); windows.add(new Leaf(new Button("注册"))); Node frame1 = new Node(new Frame("FRAME1")); windows.add(frame1); frame1.add(new Leaf(new Lable("用户名"))); frame1.add(new Leaf(new TextBox("文本框"))); frame1.add(new Leaf(new Lable("密码"))); frame1.add(new Leaf(new PasswordBox("密码框"))); frame1.add(new Leaf(new CheckBox("复选框"))); frame1.add(new Leaf(new TextBox("记住用户名"))); frame1.add(new Leaf(new LinkLable("忘记密码"))); windows.render(); }}
输出结果
渲染组件:WindowForm,内容:WINDOWS窗口渲染组件:Picture,内容:LOGO图片渲染组件:Button,内容:登录渲染组件:Button,内容:注册渲染组件:Frame,内容:FRAME1渲染组件:Lable,内容:用户名渲染组件:TextBox,内容:文本框渲染组件:Lable,内容:密码渲染组件:PasswordBox,内容:密码框渲染组件:CheckBox,内容:复选框渲染组件:TextBox,内容:记住用户名渲染组件:LinkLable,内容:忘记密码
总结:
组合模式可以让高层模块忽略了层次的差异,方便对整个层次结构进行控制。常用于视图层的展示,常见于移动端界面编写如:Android的ViewGroup
划线
评论
复制
发布于: 2020 年 06 月 23 日阅读数: 43
Bruce Xiong
关注
熊大 2017.10.18 加入
还未添加个人简介
评论