1
设计模式 - 单例 & 组合
发布于: 2020 年 06 月 21 日
一、手写单例模式
上饿汉、下懒汉

二、组合模式打印窗口组件
类图如下

详细代码
1、打印接口
public interface IPrintable {    void print();}2、组件父类,实现打印接口
public class Component implements IPrintable {    public Component(String name){        this.name = name;    }    private String name;    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    @Override    public void print() {        String componentName = getClass().getSimpleName();        System.out.println(String.format("print %s(%s)", componentName, name));    }}3、容器父类,继承组件类,重写打印方法
public class Container extends Component {    public Container(String name){        super(name);    }    private List<Component> childList;    public void addChild(Component component){        if(childList == null){            childList = new ArrayList<>();        }        childList.add(component);    }    @Override    public void print() {        super.print();        if(childList == null || childList.size() == 0){            return;        }        childList.stream().forEach(component -> {            component.print();        });    }}4、各种组件的实现
WinForm、Frame继承容器类Container,Label、Button、TextBox等继承组件类Component
public class WinForm extends Container {    public WinForm(String name) {        super(name);    }}public class Frame extends Container {    public Frame(String name) {        super(name);    }}public class Button extends Component {    public Button(String name) {        super(name);    }}public class Label extends Component {    public Label(String name) {        super(name);    }}public class CheckBox extends Component {    public CheckBox(String name) {        super(name);    }}public class LinkLabel extends Component {    public LinkLabel(String name) {        super(name);    }}public class PasswordBox extends Component {    public PasswordBox(String name) {        super(name);    }}public class Picture extends Component {    public Picture(String name) {        super(name);    }}public class TextBox extends Component {    public TextBox(String name) {        super(name);    }}5、测试类
public static void main(String[] args){        WinForm winForm = new WinForm("WINDOW窗口");        winForm.addChild(new Picture("LOGO图片"));        winForm.addChild(new Button("登陆"));        winForm.addChild(new Button("注册"));        Frame frame1 = new Frame("FRAME1");        frame1.addChild(new Label("用户名"));        frame1.addChild(new TextBox("文本框"));        frame1.addChild(new TextBox("密码"));        frame1.addChild(new PasswordBox("密码框"));        frame1.addChild(new CheckBox("复选框"));        frame1.addChild(new TextBox("记住用户名"));        frame1.addChild(new LinkLabel("忘记密码"));        winForm.addChild(frame1);        winForm.print();    }测试结果
print WinForm(WINDOW窗口)print Picture(LOGO图片)print Button(登陆)print Button(注册)print Frame(FRAME1)print Label(用户名)print TextBox(文本框)print TextBox(密码)print PasswordBox(密码框)print CheckBox(复选框)print TextBox(记住用户名)print LinkLabel(忘记密码)
划线
评论
复制
发布于: 2020 年 06 月 21 日阅读数: 52
版权声明: 本文为 InfoQ 作者【Z冰红茶】的原创文章。
原文链接:【http://xie.infoq.cn/article/eac501b0d2d70d12bffaa5391】。未经作者许可,禁止转载。

Z冰红茶
关注
还未添加个人签名 2018.09.17 加入
还未添加个人简介











 
    
评论