写点什么

代码重构练习三

用户头像
李广富
关注
发布于: 2020 年 06 月 22 日

一、手写单例模式



二、组合模式

1、定义公共的接口规范--也可以为抽象类

public interface Component {
void print();
void add(Component component);
}

2、定义树的根节点 -- 实现接口规范

public class RootNode implements Component {
private List<Component> childComponents = new ArrayList<Component>();
public RootNode(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() {
System.out.println(name);
if(this.childComponents != null && this.childComponents.size() > 0){
childComponents.stream().forEach(child ->{
child.print();
});
}
}
@Override
public void add(Component component) {
childComponents.add(component);
}
}



3、定义叶子节点 -- 叶子节点的实现

public class LeafNode implements Component {
private String name;
public LeafNode(String name) {
this.name = name;
}
@Override
public void print() {
System.out.println(name);
}
@Override
public void add(Component component) {
}
}

4、客户端

public class Client {
public static void main(String[] args) {
Component root = new RootNode("WINDOW窗口");
root.add(new LeafNode("LOGO图片"));
root.add(new LeafNode("登录"));
root.add(new LeafNode("注册"));
Component frameNode = new RootNode("FRAME1");
frameNode.add(new LeafNode("用户名"));
frameNode.add(new LeafNode("文本框"));
frameNode.add(new LeafNode("密码"));
frameNode.add(new LeafNode("密码框"));
frameNode.add(new LeafNode("复选框"));
frameNode.add(new LeafNode("记住用户名"));
frameNode.add(new LeafNode("忘记密码"));
root.add(frameNode);
root.print();
}
}

5、输出结果

WINDOW窗口
LOGO图片
登录
注册
FRAME1
用户名
文本框
密码
密码框
复选框
记住用户名
忘记密码



用户头像

李广富

关注

还未添加个人签名 2019.11.12 加入

还未添加个人简介

评论

发布
暂无评论
代码重构练习三