单例模式和组合模式实例

用户头像
L001
关注
发布于: 2020 年 06 月 24 日
  • 单例模式





  • 请用组合设计模式编写程序,打印输出图 1 的窗口,窗口组件的树结构如图 2 所示,打印输出示例参考图



/**
* 抽象基类
*/
public abstract class BaseCommpnt {
protected String name;
public BaseCommpnt(String name) {
this.name = name;
}
public abstract void print();
}

容器类

public class Continer extends BaseCommpnt {
public class Continer extends BaseCommpnt {
private List<BaseCommpnt> subNodes = new ArrayList<>();
public Continer(String path) {
super(path);
}
@Override
public void print() {
System.out.println("容器:"+super.name+"");
for (BaseCommpnt subNode : subNodes) {
subNode.print();
}
}
/**
* 添加组件
* @param c
*/
public void addCommont(BaseCommpnt c){
subNodes.add(c);
}
}

具体组件类,可以再次继承实现具体类

public class Commpont extends BaseCommpnt {
public Commpont(String name) {
super(name);
}
@Override
public void print() {
System.out.println("组件:"+super.name+"");
}
}

调用类

public static void main(String[] args) {
Continer form = new Continer("Windows 窗口");
Commpont logo = new Commpont("LOGO图片");
Commpont loginButton = new Commpont("登陆");
Commpont regeistButton = new Commpont("注册");
form.addCommont(logo);
form.addCommont(loginButton);
form.addCommont(regeistButton);
Continer iframe= new Continer("FRAME1");
Continer textbox = new Continer("文本框");
Commpont userLabel = new Commpont("标签-用户名");
Commpont pwdLabel = new Commpont("标签-密码");
Commpont userInput = new Commpont("用户名-input");
Commpont pwdInput = new Commpont("密码-input");
textbox.addCommont(userLabel);
textbox.addCommont(pwdLabel);
textbox.addCommont(userInput);
textbox.addCommont(pwdInput);
Commpont checkbox = new Commpont("checkbox");
Commpont label_1 = new Commpont("label");
iframe.addCommont(textbox);
iframe.addCommont(checkbox);
iframe.addCommont(label_1);
form.addCommont(iframe);
form.print();
}

调用结果-

容器:Windows 窗口
组件:LOGO图片
组件:登陆
组件:注册
容器:FRAME1
容器:文本框
组件:标签-用户名
组件:标签-密码
组件:用户名-input
组件:密码-input
组件:checkbox
组件:label



用户头像

L001

关注

还未添加个人签名 2018.04.28 加入

还未添加个人简介

评论

发布
暂无评论
单例模式和组合模式实例