架构师训练营第三次作业
发布于: 2020 年 10 月 04 日
请在草稿纸上手写一个单例模式的实现代码,拍照提交作业。
使用了饿汉式和懒汉式两种方式来完成单例模式的实现,其中懒汉式在写的过程中忘记给单例对象加volatile修饰符,在写完之后检查才发现的。最好的实现方式应该使用枚举来实现,但是这里是对代码的考察,所以就没有使用。
请用组合设计模式编写程序,打印输出图 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(); }}
运行结果
划线
评论
复制
发布于: 2020 年 10 月 04 日 阅读数: 16
月殇
关注
还未添加个人签名 2019.04.15 加入
还未添加个人简介
评论