《设计模式之禅》-组合模式2

组合模式:

组合模式又称为合成模式,有时又叫部分-整体模式是,主要用来描述部分和整体的关系

定义:

将对象组合成树形结构以表示“部分-整体”的层次结构,使得用户对单一对象和组合对象的使用具有一致性

组合模式的三个角色

1.Component抽象构件角色

定义参加组合对象的共有方法和属性,可以定义一些默认的行为或属性,比如在27.组合模式1中getInfo就封装到抽象类里面了

2.Leaf叶子构件

叶子对象,其下再也没有其他的分支,也就是遍历的最小对象

3.Composite树枝构件

树枝对象,它的作用是组合树枝节点和叶子节点形成一个树形结构

//抽象构件
public abstract class Component {
    //个体和整体都共享
    public voiod doSomething(){
        //相关业务逻辑
    }
}

组合模式的重点在于树枝构件

//树枝构件
public class Composite extends Component {
    //构件容器
    private ArrayList<Component> componentArrayList = new ArrayList();
    //增加一个叶子构件或树枝构件
    public void add (Component component){
        this.componentArrayList.add(component);
    }
    //删除一个叶子构件或树枝构件
    public void remove(Component component){
        this.componentArrayList.remove(component);
    }
    //获得分支下的所有叶子构件和树枝构件
    public ArrayList<Component> getChildren(){
        return this.componentArrayList;
    }
}

叶子节点没有子下级对象的对象,定义参加组合的原始对象行为

public class Leaf extends Component {
    /*
     *可以覆写父类的方法
     *public void doSomething(){}
     *
     */
}

 场景类负责树状结构的建立,以及通过递归的方法遍历整个树

public class Client {
    public static void main (String[] args){
        //创建一个根节点
        Composite root = new Composite();
        root.doSomething();
        //创建一个树枝构件
        Composite branch = new Composite();
        //创建一个叶子节点
        Leaf leaf = new Leaf();
        //建立结构
        root.add(branch);
        branch.add(leaf);
    }
    
    public static void display(Composite root){
        for(Component c : root.getChildren()){
            if(c instanceof Leaf){
                c.doSomething();
            }else{
                display((Component)c);
            }
        }
    }
}

 组合模式的优点

1.高层模块调用简单

一颗树形结构中的所有节点都是Component,局部和整体对调用者来说都是没有任何区别的,也就是说高层模块不必关心自己处理的是单个对象还是整体组合结构,简化了高层模块的代码

2.节点自由增加

使用组合模式后,如果要增加树枝节点和树叶节点都很容易是,只要找到它的父节点就行了,符合开闭原则,对以后的维护非常有利

组合模式的缺点

组合模式有一个非常明显的缺点,在使用树枝和树叶的时候,我们是直接使用了实现类,这在面向接口编程来说是很不恰当的,与依赖倒置原则是相违背的,它会限制你接口的影响范围

组合模式的使用场景

1,维护和展示部分-整体关系的场景,如树形菜单,文件和文件夹管理等

2.从一个整体中能够独立出部分模块会功能的场景

注意事项

只要是树形结构,就应该考虑使用组合模式,这个一定要记住,只要是体现局部和整体关系的时候,而且这种关系还比较复杂的时候,就可以考虑使用组合模式

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 《设计模式之禅第3版pdf》是一本介绍设计模式的书籍,是作者秦小波总结多年编程和软件开发实践的经验而得出的结论。该书提供了许多实用的设计模式,这些模式可以帮助开发人员更好地编写可维护、可扩展和可重用的代码。 该书首先介绍了设计模式的基本概念和原则,例如SOLID原则和GRASP原则,然后详细介绍了23种常见的设计模式,包括创建型、结构型和行为型模式。 该书的优点在于,它不仅提供了许多具体的代码示例和实际应用场景,还深入解释了每个模式的原理和适用条件。此外,该书还提供了设计模式的演化历程,以及如何使用UML图形表示不同的模式。 虽然该书提供了丰富的知识,但它并不是一本初学者可以轻松掌握的书籍。初学者可能需要花费很多时间和精力来理解书中的概念和代码实例。与此同时,该书的代码示例使用Java语言,因此对于非Java开发人员可能需要适当地进行转换。 综上所述,《设计模式之禅第3版pdf》是一本非常有价值的设计模式书籍,对于希望提高代码质量和扩展性的开发人员来说,是一本必读之作。 ### 回答2: 《设计模式之禅第3版》是一本关于对象设计模式的经典著作,是程序员学习设计模式的一本不可或缺的参考书。该书共分为3部分,包含了23种设计模式,并以生动的例子和详细的代码展示了如何应用各种设计模式解决实际问题。 第一部分介绍了7种创建型模式,这些模式主要用于创建对象。其中包括了工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式、享元模式和对象池模式。通过这一部分的学习,读者可以了解到如何灵活地创建对象,避免了对象创建过程中出现的一些问题。 第二部分介绍了11种结构型模式,这些模式主要用于组织类和对象。其中包括了适配器模式、桥接模式、组合模式、装饰器模式、外观模式、享元模式、代理模式、管道过滤器模式、私有类数据模式、模板方法模式和访问者模式。通过这一部分的学习,读者可以学会如何组织各种不同类和对象之间的关系,从而更加有条理地编写代码。 第三部分介绍了5种行为型模式,这些模式主要用于管理对象之间的交互和职责。其中包括了责任链模式、命令模式、解释器模式、迭代器模式和观察者模式。通过这一部分的学习,读者可以学会如何精确地定义对象之间的互动和职责,从而更好地解决实际问题。 总体而言,《设计模式之禅第3版》由浅入深,结构清晰,用通俗易懂的语言阐述了设计模式的本质和应用,是程序员进行设计模式学习和应用的一本宝典。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值