组合模式打印窗口组件的树结构

发布于: 2020 年 06 月 22 日

1、组合部件

package com.cyc.demo.composite;
/**
* 组合部件
* @author CHENYANCHUN
*/
public abstract class Component {
/**
* 操作接口
* @param printStr
*/
public abstract void operation(String printStr);
public void addChild(Component child){
throw new UnsupportedOperationException("对象不支持此功能");
}
public void removeChild(Component child){
throw new UnsupportedOperationException("对象不支持此功能");
}
}

2、枝类

package com.cyc.demo.composite;
import org.springframework.util.CollectionUtils;
import java.util.ArrayList;
import java.util.List;
/**
* @author CHENYANCHUN
* 枝类
*/
public class Composite extends Component{
private String name;
private List<Component> childComponents = new ArrayList<>();
public Composite(String name){
this.name = name;
}
@Override
public void operation(String printStr) {
System.out.println(printStr + " " + name);
if(!CollectionUtils.isEmpty(childComponents)){
childComponents.forEach(x -> {
x.operation(printStr);
});
}
}
@Override
public void addChild(Component child){
childComponents.add(child);
}
@Override
public void removeChild(Component child){
childComponents.remove(child);
}
}

3、叶子类

package com.cyc.demo.composite;
/**
* @author CHENYANCHUN
* 叶子类
*/
public class Leaf extends Component{
private String name;
public Leaf(String name){
this.name =name;
}
@Override
public void operation(String printStr) {
System.out.println(printStr + " " + name);
}
}

4、输出窗口组件

package com.cyc.demo.composite;
/**
* @author CHENYANCHUN
* 输出窗口组件
*/
public class ComponentPrint {
public static void main(String[] args) {
Composite winform = new Composite("WinForm");
Component picture = new Leaf("Picture");
Component loginButton = new Leaf("LoginButton");
Component signUpButton = new Leaf("SignUpButton");
Composite frame = new Composite("Frame");
Component userNameLable = new Leaf("UserNameLable");
Component textBox = new Leaf("TextBox");
Component passwordLable = new Leaf("PasswordLable");
Component passwordBox = new Leaf("PasswordBox");
Component checkBox = new Leaf("CheckBox");
Component rememberTextBox = new Leaf("RememberTextBox");
Component linkLable = new Leaf("LinkLable");
frame.addChild(userNameLable);
frame.addChild(textBox);
frame.addChild(passwordLable);
frame.addChild(passwordBox);
frame.addChild(checkBox);
frame.addChild(rememberTextBox);
frame.addChild(linkLable);
winform.addChild(picture);
winform.addChild(loginButton);
winform.addChild(signUpButton);
winform.addChild(frame);
winform.operation("print");
}
}

5、输出结果

print WinForm
print Picture
print LoginButton
print SignUpButton
print Frame
print UserNameLable
print TextBox
print PasswordLable
print PasswordBox
print CheckBox
print RememberTextBox
print LinkLable

正文少于50字补充:

组合模式允许你将对象组合成树形结构来表现”部分-整体“的层次结构,使得客户以一致的方式处理单个对象以及对象的组合。

组合模式实现的最关键的地方是——简单对象和复合对象必须实现相同的接口。这就是组合模式能够将组合对象和简单对象进行一致处理的原因。

  • 组合部件(Component):它是一个抽象角色,为要组合的对象提供统一的接口。

  • 叶子(Leaf):在组合中表示子节点对象,叶子节点不能有子节点。

  • 合成部件(Composite):定义有枝节点的行为,用来存储部件,实现在Component接口中的有关操作,如增加(Add)和删除(Remove)。

用户头像

今晚打老虎

关注

还未添加个人签名 2020.04.06 加入

还未添加个人简介

评论

发布
暂无评论
组合模式打印窗口组件的树结构