架构师训练营第三周课后作业
发布于: 2020 年 06 月 23 日
手写单例模式
程序员的字真是没眼看,老师要求必须手写,手写了之后还是写了个代码版本
public class Pool { private static volatile Pool pool ; public static Pool get(){ if(Objects.isNull(pool)){ synchronized (Pool.class){ if(Objects.isNull(pool)){ pool = new Pool(); } } } return pool; }}
用组合模式打印图中窗口
用组合设计模式编写程序,打印输出图 1 的窗口,窗口组件的树结构如图 2 所示,打印输出示例参考图 3。
public class Composite { public static void main(String[] args) { Component winForm = new WinForm("WINDOW窗口"); winForm.add(new Picture("LOGO图片")); winForm.add(new Button("登陆")); winForm.add(new Button("注册")); Component frame = new Frame("FRAME1"); winForm.add(frame); frame.add(new Label("用户名")); frame.add(new TextBox("文本框")); frame.add(new Label("密码")); frame.add(new PasswordBox("密码框")); frame.add(new CheckBox("复选框")); frame.add(new TextBox("记住用户名")); frame.add(new LinkLabel("忘记密码")); winForm.print(); } private static abstract class Component { private List<Component> components = new ArrayList<>(); public void add(Component component){ components.add(component); } public abstract String getName(); public void print() { System.out.println("print " + getName()); components.forEach(Component::print); } } private static class WinForm extends Component { private String name; public WinForm(String name) { this.name = name; } @Override public String getName() { return "WinForm(" + name + ")"; } } private static class Picture extends Component { private String name; public Picture(String name) { this.name = name; } @Override public String getName() { return "Picture(" + name + ")"; } } private static class Button extends Component { private String name; public Button(String name) { this.name = name; } @Override public String getName() { return "Button(" + name + ")"; } } private static class Frame extends Component { private String name; public Frame(String name) { this.name = name; } @Override public String getName() { return "Frame(" + name + ")"; } } private static class Label extends Component { private String name; public Label(String name) { this.name = name; } @Override public String getName() { return "Label(" + name + ")"; } } private static class TextBox extends Component { private String name; public TextBox(String name) { this.name = name; } @Override public String getName() { return "TextBox(" + name + ")"; } } private static class PasswordBox extends Component { private String name; public PasswordBox(String name) { this.name = name; } @Override public String getName() { return "PasswordBox(" + name + ")"; } } private static class CheckBox extends Component { private String name; public CheckBox(String name) { this.name = name; } @Override public String getName() { return "CheckBox(" + name + ")"; } } private static class LinkLabel extends Component { private String name; public LinkLabel(String name) { this.name = name; } @Override public String getName() { return "LinkLabel(" + name + ")"; } }}
程序输出结果:
print WinForm(WINDOW窗口)print Picture(LOGO图片)print Button(登陆)print Button(注册)print Frame(FRAME1)print Label(用户名)print TextBox(文本框)print Label(密码)print PasswordBox(密码框)print CheckBox(复选框)print TextBox(记住用户名)print LinkLabel(忘记密码)
划线
评论
复制
发布于: 2020 年 06 月 23 日 阅读数: 52
版权声明: 本文为 InfoQ 作者【Cloud.】的原创文章。
原文链接:【http://xie.infoq.cn/article/91d3c37631b56badfed6f699d】。未经作者许可,禁止转载。
Cloud.
关注
还未添加个人签名 2020.05.14 加入
还未添加个人简介
评论