架构师训练营作业 --Week3
发布于: 2020 年 06 月 23 日

手写Singleton模式类

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

代码如下:
import java.util.ArrayList;import java.util.List;/*** 组件抽象类,所有的gui组件都应当继承自此类。addComponent 和 removeComponent 方法只适用于* 包含子组件的组件。*/abstract class Component {	protected String name = "Component";	void addComponent(final Component component) {      throw new UnsupportedOperationException("Unsupport add component.");    }    void removeComponent(final Component component) {      throw new UnsupportedOperationException("Unsupport remove component.");    }    void print() {      throw new UnsupportedOperationException("Unsupported print operation.");    }    String getName() {      return this.name;    }  }  class Button extends Component {    public Button(final String name) {      this.name = name;    }    @Override    void print() {      System.out.println("print Button(" + this.getName() + ")");    }  }  class Picture extends Component {    public Picture(final String name) {      this.name = name;    }    @Override    void print() {      System.out.println("print Picture(" + this.getName() + ")");    }  }  class Label extends Component {    public Label(final String name) {      this.name = name;    }    @Override    void print() {      System.out.println("print Label(" + this.getName() + ")");    }  }  class LinkLabel extends Component {    public LinkLabel(final String name) {      this.name = name;    }    @Override    void print() {      System.out.println("print LinkLabel(" + this.getName() + ")");    }  }  class TextBox extends Component {    public TextBox(final String name) {      this.name = name;    }    @Override    void print() {      System.out.println("print TextBox(" + this.getName() + ")");    }  }  class PasswordBox extends Component {    public PasswordBox(final String name) {      this.name = name;    }    @Override    void print() {      System.out.println("print PasswordBox(" + this.getName() + ")");    }  }  class Checkbox extends Component {    public Checkbox(final String name) {      this.name = name;    }    @Override    void print() {      System.out.println("print Checkbox(" + this.getName() + ")");    }  }  class Frame extends Component {    // child components    private final List<Component> components;    public Frame(final String name) {      this.name = name;      this.components = new ArrayList<>();    }    @Override    void addComponent(final Component comp) {      this.components.add(comp);    }    @Override    void removeComponent(final Component comp) {      this.components.remove(comp);    }    @Override    void print() {      System.out.println("print Frame(" + this.getName() + ")");      for (final Component comp : components) {        comp.print();      }    }  }  class WinForm extends Component {    // child components    private final List<Component> components;    public WinForm(final String name) {      this.name = name;      this.components = new ArrayList<>();    }    @Override    void addComponent(final Component comp) {      this.components.add(comp);    }    @Override    void removeComponent(final Component comp) {      this.components.remove(comp);    }    @Override    void print() {      System.out.println("print WinForm(" + this.getName() + ")");      for (final Component comp : components) {        comp.print();      }    }  }  public class CompositePatternDemo {    public static void main(final String[] args) {      final WinForm winForm = new WinForm("Window 窗口");      final Button btnLogin = new Button("登录");      winForm.addComponent(btnLogin);      final Button btnReg = new Button("注册");      winForm.addComponent(btnReg);      final Picture pic = new Picture("LOGO图片");      winForm.addComponent(pic);      Frame frame = new Frame("Frame1");      Label lblUser = new Label("用户名");      frame.addComponent(lblUser);      TextBox txtUser = new TextBox("文本框");      frame.addComponent(txtUser);      Label lblPwd = new Label("密码");      frame.addComponent(lblPwd);      PasswordBox pwdbox = new PasswordBox("密码框");      frame.addComponent(pwdbox);      Checkbox chk = new Checkbox("复选框");      frame.addComponent(chk);      Label lblRememberMe = new Label("记住用户名");      frame.addComponent(lblRememberMe);      LinkLabel lnkLbl = new LinkLabel("忘记密码");      frame.addComponent(lnkLbl);      winForm.addComponent(frame);      winForm.print();	}}输出结果:
print WinForm(Window 窗口)print Button(登录)print Button(注册)print Picture(LOGO图片)print Frame(Frame1)print Label(用户名)print TextBox(文本框)print Label(密码)print PasswordBox(密码框)print Checkbox(复选框)print Label(记住用户名)print LinkLabel(忘记密码)
划线
评论
复制
发布于: 2020 年 06 月 23 日阅读数: 62
版权声明: 本文为 InfoQ 作者【吴炳华】的原创文章。
原文链接:【http://xie.infoq.cn/article/fc8117a2b7ba1a463c2d96bbf】。文章转载请联系作者。
吴炳华
关注
还未添加个人签名 2020.04.08 加入
还未添加个人简介











 
    
评论