设计模式之组合模式

定义

组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。

使用场景

设计模式中的结构型模式是用于将不同的对象组合起来。而组合模式则是应用于将树形对象组合起来,比如:公司组织架构,文件系统等,使得客户端可以统一处理单个对象和组合对象,无需关心它们的具体类型。

场景模拟

1.需求分析:在公司的组织架构中一般由员工和部门组成
2.示例图
公司
运维部
研发部
员工1
员工2
员工3
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);
    }
}

结论

在面对树形结构的需求时,我们可以优先考虑使用组合模式来设计组织代码。但要注意的是如果对象结构简单,层级不高,只有简单的一层包含关系,我们不需要额外运用设计模式来编写代码。但在复杂的树形结构中,利用组合模式来统一管理对象就是一种好的编码方式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值