架构师训练营第三周作业

发布于: 2020 年 06 月 22 日

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

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

作业:

  • 类图设计

  • 关键类的代码

Component类

public abstract class Component {
private String label;
public Component(String label) {
this.label = label;
}
public abstract void draw();
public abstract String getType();
public void printInfo() {
System.out.println("print " + getType() + "(" + label + ")");
}
}

Composite类

public class Composite extends Component {
private List<Component> components = new ArrayList<Component>();
public Composite(String label) {
super(label);
}
@Override
public void draw() {
printInfo();
for (Component c : components) {
c.draw();
}
}
@Override
public String getType() {
return "Composite";
}
public void addComponent(Component component) {
components.add(component);
}
}

Button类

public class Button extends Component {
public Button(String label) {
super(label);
}
@Override
public void draw() {
// do something
printInfo();
}
@Override
public String getType() {
return "Button";
}
}

WinForm类

public class WinForm extends Composite {
public WinForm(String label) {
super(label);
}
@Override
public String getType() {
return "WinForm";
}
}

测试类

public class ComponentTest {
public static void main(String[] args) {
// 初始化Root窗口
Composite root = new WinForm("WINDOW 窗口");
// 添加图片和按钮组件
root.addComponent(new Picture("LOGO图片"));
root.addComponent(new Button("登录"));
root.addComponent(new Button("注册"));
// 添加Frame组件
Composite frame = new Frame("Frame1");
frame.addComponent(new Lable("用户名"));
frame.addComponent(new TextBox("文本框"));
frame.addComponent(new Lable("密码"));
frame.addComponent(new PasswordBox("密码框"));
frame.addComponent(new CheckBox("复选框"));
frame.addComponent(new TextBox("记住用户名"));
frame.addComponent(new LinkLable("忘记密码"));
root.addComponent(frame);
// 画图
root.draw();
}
}

  • 打印结果

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

W_T

关注

还未添加个人签名 2018.01.09 加入

还未添加个人简介

评论

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