架构师训练营 第 3 周作业

发布于: 2 小时前

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

分别写了饿汉式和懒汉式(双重验证支持线程安全,效率上会比直接在getInstance方法上加synchronized好些)

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

类图设计:

代码目录结构:

代码实现:

public interface UIComponent {
void render();
}
public abstract class AbstractUIComponent implements UIComponent {
protected String id;
protected String name;
public void render() {
// 备注:题目要求只需打印一个具体UI组件的类型和名字即可,实际项目中render需要在各个UI组件子类中去实现
System.out.println("print " + this.getClass().getSimpleName() + "(" + this.name + ")");
}
}
public abstract class SingleUIComponent extends AbstractUIComponent {
}
public abstract class ContainerUIComponent extends AbstractUIComponent {
private List<UIComponent> components = new ArrayList<UIComponent>();
public void add(UIComponent component) {
this.components.add(component);
}
public void remove(UIComponent component) {
this.components.remove(component);
}
@Override
public void render() {
super.render();
for (UIComponent component : this.components) {
component.render();
}
}
}
public class Button extends SingleUIComponent {
public Button(String id, String name) {
this.id = id;
this.name = name;
}
}
public class CheckBox extends SingleUIComponent {
public CheckBox(String id, String name) {
this.id = id;
this.name = name;
}
}
public class Frame extends ContainerUIComponent {
public Frame(String id, String name) {
this.id = id;
this.name = name;
}
}
public class Label extends SingleUIComponent {
public Label(String id, String name) {
this.id = id;
this.name = name;
}
}
public class LinkLabel extends SingleUIComponent {
public LinkLabel(String id, String name) {
this.id = id;
this.name = name;
}
}
public class PasswordBox extends SingleUIComponent {
public PasswordBox(String id, String name) {
this.id = id;
this.name = name;
}
}
public class Picture extends SingleUIComponent {
public Picture(String id, String name) {
this.id = id;
this.name = name;
}
}
public class TextBox extends SingleUIComponent {
public TextBox(String id, String name) {
this.id = id;
this.name = name;
}
}
public class WinForm extends ContainerUIComponent {
public WinForm(String id, String name) {
this.id = id;
this.name = name;
}
}
public class UILauncher {
public static void main(String[] args) {
ContainerUIComponent winForm = new WinForm("winForm", "WINDOW窗口");
winForm.add(new Picture("picLogo", "LOGO图片"));
winForm.add(new Button("btnLogin", "登录"));
winForm.add(new Button("btnRegister", "注册"));
ContainerUIComponent frame = new Frame("frame1", "FRAME1");
frame.add(new Label("labelUsername", "用户名"));
frame.add(new TextBox("textBoxUsername", "文本框"));
frame.add(new Label("labelPassword", "密码"));
frame.add(new PasswordBox("passwordBox", "密码框"));
frame.add(new CheckBox("checkBoxRemember", "复选框"));
frame.add(new Label("labelRemember", "记住用户名"));
frame.add(new LinkLabel("linkLabelForgot", "忘记密码"));
winForm.add(frame);
winForm.render();
}
}

运行结果:

发布于: 2 小时前 阅读数: 7
用户头像

Lingjun

关注

还未添加个人签名 2018.11.22 加入

还未添加个人简介

评论

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