单例模式及组合模式
发布于: 2020 年 06 月 24 日
手写单例
组合模式
请用组合设计模式编写程序,打印输出图 1 的窗口,窗口组件的树结构如图 2 所示,打印输出示例参考图
程序:
VisualComponentI.java
package components;public interface VisualComponentI { void addPart(VisualComponentI part); void removePart(VisualComponentI part); void print();}
WinForm.java
package components;import java.util.ArrayList;import java.util.List;public class WinForm implements VisualComponentI { private List<VisualComponentI> listParts = new ArrayList<VisualComponentI>(); private String msg = "print WinForm(WINDOW窗口)"; @Override public void addPart(VisualComponentI part) { listParts.add(part); }; @Override public void removePart(VisualComponentI part) { listParts.remove(part); } @Override public void print() { System.out.println(msg); for (VisualComponentI part : listParts) { part.print(); } }; public static void main(String[] args) { VisualComponentI frame = new Frame(); frame.addPart(new UsernameLabel()); frame.addPart(new UserNameTextBox()); frame.addPart(new PwdLabel()); frame.addPart(new PwdBox()); frame.addPart(new CheckBox()); frame.addPart(new RemainUserNameTextBox()); frame.addPart(new LinkLable()); VisualComponentI winForm = new WinForm(); winForm.addPart(new Picture()); winForm.addPart(new LoginButton()); winForm.addPart(new RegistButton()); winForm.addPart(frame); winForm.print(); }}class Picture implements VisualComponentI { List<VisualComponentI> listParts = new ArrayList<VisualComponentI>(); String msg = "print Picture(LOGO图片)"; @Override public void addPart(VisualComponentI part) { listParts.add(part); }; @Override public void removePart(VisualComponentI part) { listParts.remove(part); } @Override public void print() { System.out.println(msg); for (VisualComponentI part : listParts) { part.print(); } };}class LoginButton implements VisualComponentI { List<VisualComponentI> listParts = new ArrayList<VisualComponentI>(); String msg = "print Button(登录)"; @Override public void addPart(VisualComponentI part) { listParts.add(part); }; @Override public void removePart(VisualComponentI part) { listParts.remove(part); } @Override public void print() { System.out.println(msg); for (VisualComponentI part : listParts) { part.print(); } };}class RegistButton implements VisualComponentI { List<VisualComponentI> listParts = new ArrayList<VisualComponentI>(); String msg = "print Button(注册)"; @Override public void addPart(VisualComponentI part) { listParts.add(part); }; @Override public void removePart(VisualComponentI part) { listParts.remove(part); } @Override public void print() { System.out.println(msg); for (VisualComponentI part : listParts) { part.print(); } };}class Frame implements VisualComponentI { List<VisualComponentI> listParts = new ArrayList<VisualComponentI>(); String msg = "print Frame(FRAME1)"; @Override public void addPart(VisualComponentI part) { listParts.add(part); }; @Override public void removePart(VisualComponentI part) { listParts.remove(part); } @Override public void print() { System.out.println(msg); for (VisualComponentI part : listParts) { part.print(); } };}class UsernameLabel implements VisualComponentI { List<VisualComponentI> listParts = new ArrayList<VisualComponentI>(); String msg = "print Label(用户名)"; @Override public void addPart(VisualComponentI part) { listParts.add(part); }; @Override public void removePart(VisualComponentI part) { listParts.remove(part); } @Override public void print() { System.out.println(msg); for (VisualComponentI part : listParts) { part.print(); } };}class UserNameTextBox implements VisualComponentI { List<VisualComponentI> listParts = new ArrayList<VisualComponentI>(); String msg = "print TextBox(文本框)"; @Override public void addPart(VisualComponentI part) { listParts.add(part); }; @Override public void removePart(VisualComponentI part) { listParts.remove(part); } @Override public void print() { System.out.println(msg); for (VisualComponentI part : listParts) { part.print(); } };}class PwdLabel implements VisualComponentI { List<VisualComponentI> listParts = new ArrayList<VisualComponentI>(); String msg = "print Label(密码)"; @Override public void addPart(VisualComponentI part) { listParts.add(part); }; @Override public void removePart(VisualComponentI part) { listParts.remove(part); } @Override public void print() { System.out.println(msg); for (VisualComponentI part : listParts) { part.print(); } };}class PwdBox implements VisualComponentI { List<VisualComponentI> listParts = new ArrayList<VisualComponentI>(); String msg = "print PasswordBox(密码框)"; @Override public void addPart(VisualComponentI part) { listParts.add(part); }; @Override public void removePart(VisualComponentI part) { listParts.remove(part); } @Override public void print() { System.out.println(msg); for (VisualComponentI part : listParts) { part.print(); } };}class CheckBox implements VisualComponentI { List<VisualComponentI> listParts = new ArrayList<VisualComponentI>(); String msg = "print CheckBox(复选框)"; @Override public void addPart(VisualComponentI part) { listParts.add(part); }; @Override public void removePart(VisualComponentI part) { listParts.remove(part); } @Override public void print() { System.out.println(msg); for (VisualComponentI part : listParts) { part.print(); } };}class RemainUserNameTextBox implements VisualComponentI { List<VisualComponentI> listParts = new ArrayList<VisualComponentI>(); String msg = "print TextBox(记住用户名)"; @Override public void addPart(VisualComponentI part) { listParts.add(part); }; @Override public void removePart(VisualComponentI part) { listParts.remove(part); } @Override public void print() { System.out.println(msg); for (VisualComponentI part : listParts) { part.print(); } };}class LinkLable implements VisualComponentI { List<VisualComponentI> listParts = new ArrayList<VisualComponentI>(); String msg = "print LinkLabel(忘记密码)"; @Override public void addPart(VisualComponentI part) { listParts.add(part); }; @Override public void removePart(VisualComponentI part) { listParts.remove(part); } @Override public void print() { System.out.println(msg); for (VisualComponentI part : listParts) { part.print(); } };}
结果:
划线
评论
复制
发布于: 2020 年 06 月 24 日阅读数: 48
走过路过飞过
关注
还未添加个人签名 2020.04.13 加入
还未添加个人简介
评论