写点什么

架构师训练营第三周作业

用户头像
Bruce Xiong
关注
发布于: 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



用户头像

Bruce Xiong

关注

熊大 2017.10.18 加入

还未添加个人简介

评论

发布
暂无评论
架构师训练营第三周作业