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

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

Component 抽象类
public abstract class Component {private final String name;private String parentName;public Component(String name) {this.name = name;}public String getName() {return this.name;}public String getParentName() {return parentName;}public void setParentName(String parentName) {this.parentName = parentName;}public abstract void print();}
public class ElementComponent extends Component{public ElementComponent(String name) {super(name);}@Overridepublic void print() {System.out.println(getParentName() + " 的叶子节点: " + getName());}}
public class ElementContainer extends Component {private List<Component> subComponentList = new ArrayList<>();public ElementContainer(String name) {super(name);}public void addElement(Component c) {c.setParentName(this.getName());subComponentList.add(c);}public List<Component> getSubComponentList() {return subComponentList;}@Overridepublic void print() {System.out.println("树枝节点: " + getName());}}
public class Client {private static ElementContainer root;public static void main(String[] args) {init();root.print();printInfo(root);}private static void init() {// 创建对象ElementContainer window = new ElementContainer("window窗口");ElementContainer frame = new ElementContainer("登录Frame");Component logoPic = new ElementComponent("logo图片");Component loginButton = new ElementComponent("登录按钮");Component registerButton = new ElementComponent("注册按钮");Component usernameLabel = new ElementComponent("用户名label");Component usernameTextBox = new ElementComponent("用户名文本框");Component passwordLabel = new ElementComponent("密码label");Component passwordTextBox = new ElementComponent("密码文本框");Component rememberPasswordCheckBox = new ElementComponent("是否记住密码复选框");Component rememberPasswordLabel = new ElementComponent("记住密码label");Component forgetPasswordLink = new ElementComponent("忘记密码link");// 组装window.addElement(logoPic);window.addElement(frame);window.addElement(loginButton);window.addElement(registerButton);frame.addElement(usernameLabel);frame.addElement(usernameTextBox);frame.addElement(passwordLabel);frame.addElement(passwordTextBox);frame.addElement(rememberPasswordCheckBox);frame.addElement(rememberPasswordLabel);frame.addElement(forgetPasswordLink);root = window;}private static void printInfo(ElementContainer root) {if (root != null && !root.getSubComponentList().isEmpty()) {for (Component e : root.getSubComponentList()) {e.print();if (e instanceof ElementContainer) {printInfo((ElementContainer)e);}}}}}
打印结果
树枝节点: window窗口window窗口 的叶子节点: logo图片树枝节点: 登录Frame登录Frame 的叶子节点: 用户名label登录Frame 的叶子节点: 用户名文本框登录Frame 的叶子节点: 密码label登录Frame 的叶子节点: 密码文本框登录Frame 的叶子节点: 是否记住密码复选框登录Frame 的叶子节点: 记住密码label登录Frame 的叶子节点: 忘记密码linkwindow窗口 的叶子节点: 登录按钮window窗口 的叶子节点: 注册按钮

