1
架构师训练营第三周作业
发布于: 2020 年 06 月 21 日
1.请在草稿纸上手写一个单例模式的实现代码,拍照提交作业。
2.请用组合设计模式编写程序,打印输出图 1 的窗口,窗口组件的树结构如图 2 所示,打印输出示例参考图 3。
/** * 元素 */public interface Element { /** * 打印 */ void print(); /** * 打印 * @param prefix 前缀 */ void print(String prefix);}public abstract class AbstractElement implements Element { private String text; protected AbstractElement(){ } public AbstractElement(String text){ this.text=text; } public void print() { System.out.println(this.getType()+"("+this.text+")"); } public void print(String prefix) { System.out.println(prefix+this.getType()+"("+this.text+")"); } public abstract String getType();}/** * Button */public class Button extends AbstractElement { public Button(String text){ super(text); } @Override public String getType() { return "Button"; }}/** * CheckBox */public class CheckBox extends AbstractElement { public CheckBox(String text){ super(text); } @Override public String getType() { return "CheckBox"; }}/** * Label */public class Label extends AbstractElement { public Label(String text){ super(text); } @Override public String getType() { return "Label"; }}/** * LinkLabel */public class LinkLabel extends AbstractElement { public LinkLabel(String text){ super(text); } @Override public String getType() { return "LinkLabel"; }}/** * PasswordBox */public class PasswordBox extends AbstractElement { public PasswordBox(String text){ super(text); } @Override public String getType() { return "PasswordBox"; }}/** * 图片 */public class Picture extends AbstractElement { public Picture(String text){ super(text); } @Override public String getType() { return "Picture"; }}/** * TextBox */public class TextBox extends AbstractElement { public TextBox(String text){ super(text); } @Override public String getType() { return "TextBox"; }}/** * 容器元素 */public abstract class Container extends AbstractElement { private List<Element> elements=new ArrayList<Element>(); protected String prefix=" "; protected Container(){ } public Container(String text){ super(text); } @Override public void print() { super.print(); for(Element element:elements){ element.print(prefix); } } @Override public void print(String prefix) { super.print(prefix); for(Element element:elements){ element.print(prefix+this.prefix); } } public void addEle(Element element){ this.elements.add(element); } public void removeEle(Element element){ this.elements.remove(element); }}/** * Frame */public class Frame extends Container { public Frame(String text){ super(text); } @Override public String getType() { return "Frame"; }}/** * WinForm */public class WinForm extends Container { public WinForm(String text) { super(text); } @Override public String getType() { return "WinForm"; }}
结果
WinForm(WINDOW窗体) Picture(LOGO图片) Button(登录) Button(注册) Frame(FRAME1) Label(用户名) TextBox(文本框) Label(密码) PasswordBox(密码框) CheckBox(复选框) TextBox(记住用户名) LinkLabel(忘记密码)
划线
评论
复制
发布于: 2020 年 06 月 21 日 阅读数: 35
版权声明: 本文为 InfoQ 作者【张明森】的原创文章。
原文链接:【http://xie.infoq.cn/article/3404d2313eaf1b45505e17880】。文章转载请联系作者。
张明森
关注
还未添加个人签名 2017.10.16 加入
还未添加个人简介
评论