架构师训练营-第三周作业

    科技2025-06-26  7

    作业一:

    1. 请在草稿纸上手写一个单例模式的实现代码,拍照提交作业。

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

    package com.chaoqiang.structural.composite.demo2; /** * @author chaoqiang * @date 2020-10-08 10:31 **/ abstract class WindowComponent { public void print() { throw new UnsupportedOperationException(); } public void addComponent(WindowComponent component) { throw new UnsupportedOperationException(); } } package com.chaoqiang.structural.composite.demo2; import java.util.ArrayList; import java.util.List; /** * @author chaoqiang * @date 2020-10-08 11:30 **/ public class Window extends WindowComponent { private List<WindowComponent> components = new ArrayList<WindowComponent>(); public Window() { } public Window(List<WindowComponent> components) { this.components = components; } @Override public void addComponent(WindowComponent component) { components.add(component); } @Override public void print() { System.out.println("print WinForm(WINDOW窗口)"); for (WindowComponent component : components) { component.print(); } } } package com.chaoqiang.structural.composite.demo2; /** * @author chaoqiang * @date 2020-10-08 11:34 **/ public class Button extends WindowComponent { private String name; public Button(String name) { this.name = name; } @Override public void print() { System.out.println("print Button(" + name + ")"); } } package com.chaoqiang.structural.composite.demo2; /** * @author chaoqiang * @date 2020-10-08 11:42 **/ public class CheckBox extends WindowComponent { @Override public void print() { System.out.println("print CheckBox(复选框)"); } } package com.chaoqiang.structural.composite.demo2; import java.util.ArrayList; import java.util.List; /** * @author chaoqiang * @date 2020-10-08 11:46 **/ public class Frame extends WindowComponent { private List<WindowComponent> components = new ArrayList<WindowComponent>(); private String name; public Frame(String name) { this.name = name; } @Override public void addComponent(WindowComponent component) { components.add(component); } @Override public void print() { System.out.println("print Frame(" + name + ")"); for (WindowComponent component : components) { component.print(); } } } package com.chaoqiang.structural.composite.demo2; /** * @author chaoqiang * @date 2020-10-08 11:39 **/ public class Label extends WindowComponent { private String name; public Label(String name) { this.name = name; } @Override public void print() { System.out.println("print Label(" + name + ")"); } } package com.chaoqiang.structural.composite.demo2; /** * @author chaoqiang * @date 2020-10-08 11:49 **/ public class LinkLable extends WindowComponent { private String name; public LinkLable(String name) { this.name = name; } @Override public void print() { System.out.println("print LinkLable(" + name + ")"); } } package com.chaoqiang.structural.composite.demo2; /** * @author chaoqiang * @date 2020-10-08 12:00 **/ public class PasswordBox extends WindowComponent { @Override public void print() { System.out.println("print PasswordBox(密码框)"); } } package com.chaoqiang.structural.composite.demo2; /** * @author chaoqiang * @date 2020-10-08 11:33 **/ public class Picture extends WindowComponent { private String name; public Picture(String name) { this.name = name; } @Override public void print() { System.out.println("print Picture(" + name + ")"); } } package com.chaoqiang.structural.composite.demo2; /** * @author chaoqiang * @date 2020-10-08 11:47 **/ public class TextBox extends WindowComponent { private String name; public TextBox() { } public TextBox(String name) { this.name = name; } @Override public void print() { if (name != null) { System.out.println("print TextBox(" + name + ")"); } else { System.out.println("print TextBox(文本框)"); } } } package com.chaoqiang.structural.composite.demo2; /** * @author chaoqiang * @date 2020-10-08 11:53 **/ public class WindowTestDrive { public static void main(String[] args) { WindowComponent window = new Window(); window.addComponent(new Picture("LOGO图片")); window.addComponent(new Button("登录")); window.addComponent(new Button("注册")); WindowComponent frame = new Frame("FRAME1"); frame.addComponent(new Label("用户名")); frame.addComponent(new TextBox()); frame.addComponent(new Label("密码")); frame.addComponent(new PasswordBox()); frame.addComponent(new CheckBox()); frame.addComponent(new TextBox("记住用户名")); frame.addComponent(new LinkLable("忘记密码")); window.addComponent(frame); window.print(); } }

    result:

    Processed: 0.012, SQL: 8