定义
组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。
使用场景
设计模式中的结构型模式是用于将不同的对象组合起来。而组合模式则是应用于将树形对象组合起来,比如:公司组织架构,文件系统等,使得客户端可以统一处理单个对象和组合对象,无需关心它们的具体类型。
场景模拟
1.需求分析:在公司的组织架构中一般由员工和部门组成
2.示例图
3.针对这种树形结构组织,我们就可以用运用组合模式统一管理这些类,便捷开发
代码案例
1. 接口定义
interface Component {
public void showName();
public void showPosts();
};
2.叶子节点
class Leaf implements Component {
public Leaf(String name, String post) {
this.name = name;
this.post = post;
}
private String name;
private String post;
@Override
public void showName() {
System.out.println("name:" + name);
}
@Override
public void showPosts() {
System.out.println("post:" + post);
}
}
3. 组织节点
class Composite implements Component {
private String name;
public Composite(String name) {
this.name = name;
}
private List<Component> components = new ArrayList<>();
public void addComponent(Component component) {
components.add(component);
}
@Override
public void showName() {
components.forEach(Component::showName);
}
@Override
public void showPosts() {
components.forEach(Component::showPosts);
}
}
4.测试案例
public class CompositeMain {
public static void main(String[] args) {
Component employye1 = new Leaf("Bob", "员工");
Component employye2 = new Leaf("Aic", "员工");
Component employye3 = new Leaf("Cild", "员工");
Component employye4 = new Leaf("Dila", "员工");
Composite part1 = new Composite("研发部");
part1.addComponent(employye1);
part1.addComponent(employye2);
Composite part2 = new Composite("运维部");
part2.addComponent(employye3);
part2.addComponent(employye4);
Composite firm = new Composite("**科技公司");
firm.addComponent(part1);
firm.addComponent(part2);
//firm.showName();
System.out.println(firm);
}
}
结论
在面对树形结构的需求时,我们可以优先考虑使用组合模式来设计组织代码。但要注意的是如果对象结构简单,层级不高,只有简单的一层包含关系,我们不需要额外运用设计模式来编写代码。但在复杂的树形结构中,利用组合模式来统一管理对象就是一种好的编码方式。