架构师训练营 -week03- 作业

用户头像
大刘
关注
发布于: 2020 年 10 月 03 日
架构师训练营 -week03- 作业
作业一:手写单例模式

手写了两种:饿汉式和静态方法类的方式,应该是日常工作中比较常见的两种写法。

其他还有:懒汉式,双重检测,还有枚举的方式。



作业二:组合模式实践

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



实现方法:

public interface Component {
void print();
}



public abstract class BaseComponent implements Component {
private String name;
private String function;
private List<Component> componentList;
public BaseComponent(String name, String function) {
this.name = name;
this.function = function;
componentList = new ArrayList<>();
}
public void addComponent(Component component) {
componentList.add(component);
}
public void removeComponent(Component component) {
if (componentList.contains(component)) {
componentList.remove(component);
}
}
@Override
public void print() {
System.out.println(String.format("print %s(%s)", this.function, this.name));
for (Component component : componentList) {
component.print();
}
}
}



public class WindowForm extends BaseComponent {
public WindowForm(String name, String function) {
super(name, function);
}
}
public class Button extends BaseComponent {
public Button(String name, String function) {
super(name, function);
}
}
public class Frame extends BaseComponent {
public Frame(String name, String function) {
super(name, function);
}
}
public class CheckBox extends BaseComponent {
public CheckBox(String name, String function) {
super(name, function);
}
}
//。。。其他的组件 textBox,label等



public static void main(String[] args) {
BaseComponent windowForm = new WindowForm("WINDOW窗口", "WinForm");
windowForm.addComponent(new Picture("LOGO图片", "Picture"));
windowForm.addComponent(new Button("登录", "Button"));
windowForm.addComponent(new Button("注册", "Button"));
BaseComponent frame = new Frame("FRAME1", "Frame");
frame.addComponent(new Label("用户名", "Label"));
frame.addComponent(new TextBox("文本框", "TextBox"));
frame.addComponent(new Label("密码", "Label"));
frame.addComponent(new PasswordBox("密码框", "TextBox"));
frame.addComponent(new CheckBox("复选框", "CheckBox"));
frame.addComponent(new TextBox("记住用户名", "TextBox"));
frame.addComponent(new LinkLabel("忘记密码", "LinkLabel"));
windowForm.addComponent(frameComp);
windowForm.print();
}



输出结果:
print WinForm(WINDOW窗口)
print Picture(LOGO图片)
print Button(登录)
print Button(注册)
print Frame(FRAME1)
print Label(用户名)
print TextBox(文本框)
print Label(密码)
print TextBox(密码框)
print CheckBox(复选框)
print TextBox(记住用户名)
print LinkLabel(忘记密码)
Process finished with exit code 0



用户头像

大刘

关注

大道至简,知易行难 2017.12.27 加入

想成为合格架构师的架构师

评论

发布
暂无评论
架构师训练营 -week03- 作业