1
单例及组合模式实践
发布于: 2020 年 06 月 21 日
单例模式
题目:请在草稿纸上手写一个单例模式的实现代码,拍照提交作业。
答:
组合模式
题目:请用组合设计模式编写程序,打印输出图 1 的窗口,窗口组件的树结构如图 2 所示,打印输出示例参考图 3。
1、定义接口
public interface Component { void print();}
2、定义组合基类
import java.util.ArrayList;import java.util.List;public class WinForm implements Component{ public WinForm(String name){ this.name = name; } private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } List<Component> components = new ArrayList<Component>(); public void addComponent(Component component){ components.add(component); } public void print() { System.out.println("print WinForm("+this.getName()+")"); for (Component c: components) { c.print(); } }}
3、定义各个派生类
public class Frame extends WinForm { public Frame(String name) { super(name); } @Override public void print() { System.out.println("print Frame("+this.getName()+")"); for (Component c: components) { c.print(); } }}//其他类与Button差不多,只有print方法不一样public class Button extends WinForm { public Button(String name) { super(name); } @Override public void print() { System.out.println("print Button("+this.getName()+")"); }}
4、组装对象生成main函数
public class demo { public static void main(String[] args) { WinForm winForm = new WinForm("WINDOWS窗口"); Picture picture = new Picture("LOGO图片"); Button buttonLogin = new Button("登陆"); Button buttonRegister = new Button("注册"); Frame frame = new Frame("FRAME1"); Label labelUser = new Label("用户名"); TextBox textBoxUser = new TextBox("用户名文本框"); Label labelPswd = new Label("密码"); PasswordBox passwordBox = new PasswordBox("密码框"); CheckBox checkBox = new CheckBox("复选框"); TextBox textBoxRemeber = new TextBox("记住用户名"); LinkLabel linkLabelForget = new LinkLabel("忘记密码"); frame.addComponent(labelUser); frame.addComponent(textBoxUser); frame.addComponent(labelPswd); frame.addComponent(passwordBox); frame.addComponent(checkBox); frame.addComponent(textBoxRemeber); frame.addComponent(linkLabelForget); winForm.addComponent(picture); winForm.addComponent(buttonLogin); winForm.addComponent(buttonRegister); winForm.addComponent(frame); winForm.print(); }}
5、运行结果
划线
评论
复制
发布于: 2020 年 06 月 21 日阅读数: 54
版权声明: 本文为 InfoQ 作者【WulalaOlala】的原创文章。
原文链接:【http://xie.infoq.cn/article/a51c0fa79e92d1c0ccff7f506】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
WulalaOlala
关注
还未添加个人签名 2019.05.14 加入
还未添加个人简介
评论