week03
发布于: 2020 年 09 月 24 日
请在草稿纸上手写一个单例模式的实现代码,拍照提交作业。
请用组合设计模式编写程序,打印输出图 1 的窗口,窗口组件的树结构如图 2 所示,打印输出示例参考图
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); } @Override public 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; } @Override public 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 的叶子节点: 忘记密码link window窗口 的叶子节点: 登录按钮 window窗口 的叶子节点: 注册按钮
划线
评论
复制
发布于: 2020 年 09 月 24 日阅读数: 37
SuperLab
关注
还未添加个人签名 2020.04.01 加入
还未添加个人简介
评论