写点什么

架构师训练营作业 (第三周)

用户头像
王海
关注
发布于: 2020 年 06 月 19 日

作业一

请在草稿纸上手写一个单例模式的实现代码(拍照提交作业)

单例模式


作业二

请用组合设计模式编写程序,打印输出图 1 的窗口,窗口组件的树结构如图 2 所示,打印输出示例参考图 3


抽象构件代码

package com.ocean;

/** * 抽象构件 */public abstract class Component {
protected String name;
public Component(String name){ this.name = name; }
public abstract void print();
@Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Component component = (Component) o; return name.equals(component.name); }
@Override public int hashCode() { return Objects.hash(name); }}
复制代码

树枝构件代码

package com.ocean;
import java.util.*;
/** * 树枝构件 */public class Composite extends Component {
public Composite(String name) { super(name); }
/** * 构件容器 */ private Set<Component> components = new LinkedHashSet<>();
/** * 增加一个叶子构件或分支构件 * @param component */ public void add(Component component){ this.components.add(component); }
public void remove(Component component){ this.components.remove(component); }
public Set<Component> getChilden(){ return this.components; }
@Override public void print() { System.out.println("print " + this.name); for(Component c : this.getChilden()){ c.print(); } }}
复制代码

树叶构件代码

package com.ocean;
/** * 树叶构件 */public class Leaf extends Component {
public Leaf(String name) { super(name); }
@Override public void print() { System.out.println("print " + this.name); }}
复制代码

场景代码

package com.ocean;
public class Client {
public static void main(String[] args) { Composite window = createWindow(); print(window); }
public static Composite createWindow(){ Composite root = new Composite("WinForm(WINDOW窗口)");
root.add(new Composite("Picture(LOGO图片)")); root.add(new Leaf("Button(登录)")); root.add(new Leaf("Button(注册)"));
Composite formGroup = new Composite("Frame(FRAME1)"); formGroup.add(new Leaf("Label(用户名)")); formGroup.add(new Leaf("TextBox(文本框)")); formGroup.add(new Leaf("Label(密码)")); formGroup.add(new Leaf("PasswordBox(密码框)")); formGroup.add(new Leaf("CheckBox(复选框)")); formGroup.add(new Leaf("TextBox(记住用户名)")); formGroup.add(new Leaf("Label(忘记密码)")); root.add(formGroup);

return root; } public static void print(Composite composite){ composite.print(); }}
复制代码


发布于: 2020 年 06 月 19 日阅读数: 101
用户头像

王海

关注

还未添加个人签名 2018.06.17 加入

还未添加个人简介

评论

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