架构师训练营第三次作业

用户头像
月殇
关注
发布于: 2020 年 10 月 04 日
  1. 请在草稿纸上手写一个单例模式的实现代码,拍照提交作业。

使用了饿汉式和懒汉式两种方式来完成单例模式的实现,其中懒汉式在写的过程中忘记给单例对象加volatile修饰符,在写完之后检查才发现的。最好的实现方式应该使用枚举来实现,但是这里是对代码的考察,所以就没有使用。

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

接口代码

public interface Component {
void run();
}



非窗口代码的根对象

public class ComponentCase implements Component {
String string;
@Override
public void run() {
System.out.println(string);
}
}



窗口代码的根对象

public class ComponentSuite implements Component {
String string;
private List<Component> suite = new ArrayList<>();
@Override
public void run() {
System.out.println(this.string);
for (Component component : suite) {
component.run();
}
}
public void addComponent(Component component){
suite.add(component);
}
}



WinForm的实例

public class WinForm extends ComponentSuite{
public WinForm(String string){
this.string = "print WinForm(" + string + ")";
}
}



Frame的实例

public class Frame extends ComponentSuite{
public Frame(String string){
this.string = "print Frame(" + string + ")";
}
}



Button

public class Button extends ComponentCase {
public Button(String string){
this.string = "print Button(" + string + ")";
}
}



CheckBox、Lable、Picture、TextBox等的实例

public class CheckBox extends ComponentCase {
public CheckBox(String string){
this.string = "print CheckBox(" + string + ")";
}
}



客户端对象

public class AppStore {
public static void main(String[] args) {
ComponentSuite suite = new WinForm("WINDOW窗口");
suite.addComponent(new Picture("LOGO图片"));
suite.addComponent(new Button("登录"));
suite.addComponent(new Button("注册"));
ComponentSuite frame1 = new Frame("FRAME1");
frame1.addComponent(new Lable("用户名"));
frame1.addComponent(new TextBox("文本框"));
frame1.addComponent(new Lable("密码"));
frame1.addComponent(new PasswordBox("密码框"));
frame1.addComponent(new CheckBox("复选框"));
frame1.addComponent(new TextBox("记住用户名"));
frame1.addComponent(new LinkLable("忘记密码"));
suite.addComponent(frame1);
suite.run();
}
}



运行结果



用户头像

月殇

关注

还未添加个人签名 2019.04.15 加入

还未添加个人简介

评论

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