【设计模式】组合模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )(一)

简介: 【设计模式】组合模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )(一)

文章目录

一、组合模式简介

二、组合模式适用场景

三、组合模式优缺点

四、组合模式和访问者模式

五、组合模式代码示例

1、书籍和目录的抽象父类

2、书籍类

3、目录类

4、测试类





一、组合模式简介


组合模式 : 将 对象 组合成 树形结构 , 表示 " 部分-整体 " 层次结构 ;


组合模式 使 客户端 对 单个对象 和 组合对象 保持一致的 方式处理 ;



如 : 文件系统 , 根目录下有若干文件和目录 , 在二级目录下还有目录和文件 , 这种情况下 , 适合使用组合模式 ;



组合模式类型 : 结构型






二、组合模式适用场景


组合模式适用场景 :


忽略差异 : 希望 客户端 可以 忽略 组合对象 与 单个对象 的差异 ;

处理树形结构 ;





三、组合模式优缺点


组合模式优点 :


定义层次 : 清楚地 定义 分层次 的 复杂对象 , 表示 对象 的 全部 或 部分 层次 ;

忽略层次 : 让 客户端 忽略 层次之间的差异 , 方便对 整个层次结构 进行控制 ;

简化客户端代码 ;

符合开闭原则 ;


组合模式缺点 :


限制类型复杂 : 限制类型时 , 比较复杂 ;

如 : 某个目录中只能包含文本文件 , 使用组合模式时 , 不能依赖类型系统 , 施加约束 , 它们都来自于节点的抽象层 ; 在这种情况下 , 必须通过在运行时进行类型检查 , 这样就变得比较复杂 ;

使设计变得更加抽象 ;





四、组合模式和访问者模式


组合模式和访问者模式 : 两个模式经常结合起来使用 , 使用 访问者模式 , 访问 组合模式 中的 递归结构 ,






五、组合模式代码示例


业务逻辑 :


书籍 分属于 目录 下 , 如果使 书籍目录 和 书籍 继承同一个抽象类 ( 目录组件 ) , 可以将 书籍 及 由书籍组成的书籍目录 当做同一个类型的对象进行操作 , 操作上的具体的差别 , 进行定制化处理 ;



1、书籍和目录的抽象父类


抽象类中所有的方法 都抛出异常 , 子类重写需要的方法 , 如果子类实例对象调用没有重写的方法 , 就会抛出异常 ;


package composite;
/**
 * 目录组件
 *      目录 和 书籍 都继承 CatalogComponent 接口
 *      子类根据当前的的类型 , 选择性重写接口
 */
public abstract class CatalogComponent {
    /**
     * 添加元素
     * @param catalogComponent
     */
    public void add(CatalogComponent catalogComponent) {
        throw new UnsupportedOperationException("不支持的操作");
    }
    /**
     * 删除元素
     * @param catalogComponent
     */
    public void remove(CatalogComponent catalogComponent) {
        throw new UnsupportedOperationException("不支持的操作");
    }
    /**
     * 获取名称
     * @param catalogComponent
     */
    public String getName(CatalogComponent catalogComponent) {
        throw new UnsupportedOperationException("不支持的操作");
    }
    /**
     * 获取价格
     * @param catalogComponent
     * @return
     */
    public double getPrice(CatalogComponent catalogComponent) {
        throw new UnsupportedOperationException("不支持的操作");
    }
    /**
     * 如果该组件是目录 , 直接打印目录
     * 如果该组件是书籍 , 直接打印课程
     */
    public void printf() {
        throw new UnsupportedOperationException("不支持的操作");
    }
}


目录
相关文章
|
9月前
|
设计模式 Java 定位技术
【设计模式】【结构型模式】组合模式(Composite)
一、入门 什么是组合模式 组合模式(Composite Pattern)是一种结构型设计模式,它允许你将对象组合成树形结构来表示“部分-整体”的层次关系。组合模式使得客户端可以统一处理单个对象和组合对
292 10
|
12月前
|
设计模式 存储 安全
「全网最细 + 实战源码案例」设计模式——组合模式
组合模式(Composite Pattern)是一种结构型设计模式,用于将对象组合成树形结构以表示“部分-整体”的层次结构。它允许客户端以一致的方式对待单个对象和对象集合,简化了复杂结构的处理。组合模式包含三个主要组件:抽象组件(Component)、叶子节点(Leaf)和组合节点(Composite)。通过这种模式,客户端可以统一处理简单元素和复杂元素,而无需关心其内部结构。适用于需要实现树状对象结构或希望以相同方式处理简单和复杂元素的场景。优点包括支持树形结构、透明性和遵循开闭原则;缺点是可能引入不必要的复杂性和过度抽象。
387 22
|
设计模式 Java 关系型数据库
设计模式——设计模式简介和七大原则
设计模式的目的和核心原则、单一职责原则、接口隔离原则、依赖倒转原则、里氏替换原则、开闭原则、迪米特法则、合成复用原则
设计模式——设计模式简介和七大原则
|
设计模式 Java
Java设计模式:组合模式的介绍及代码演示
组合模式是一种结构型设计模式,用于将多个对象组织成树形结构,并统一处理所有对象。例如,统计公司总人数时,可先统计各部门人数再求和。该模式包括一个通用接口、表示节点的类及其实现类。通过树形结构和节点的通用方法,组合模式使程序更易扩展和维护。
250 2
Java设计模式:组合模式的介绍及代码演示
|
设计模式 存储 安全
Java设计模式-组合模式(13)
Java设计模式-组合模式(13)
165 2
|
9月前
|
设计模式 Java 数据库连接
【设计模式】【创建型模式】工厂方法模式(Factory Methods)
一、入门 什么是工厂方法模式? 工厂方法模式(Factory Method Pattern)是一种创建型设计模式,它定义了一个用于创建对象的接口,但由子类决定实例化哪个类。工厂方法模式使类的实例化延迟
269 16
|
9月前
|
设计模式 负载均衡 监控
并发设计模式实战系列(2):领导者/追随者模式
🌟 ​大家好,我是摘星!​ 🌟今天为大家带来的是并发设计模式实战系列,第二章领导者/追随者(Leader/Followers)模式,废话不多说直接开始~
261 0
|
9月前
|
设计模式 监控 Java
并发设计模式实战系列(1):半同步/半异步模式
🌟 ​大家好,我是摘星!​ 🌟今天为大家带来的是并发设计模式实战系列,第一章半同步/半异步(Half-Sync/Half-Async)模式,废话不多说直接开始~
264 0
|
9月前
|
设计模式 安全 Java
并发设计模式实战系列(12):不变模式(Immutable Object)
🌟 大家好,我是摘星!🌟今天为大家带来的是并发设计模式实战系列,第十二章,废话不多说直接开始~
210 0
|
设计模式 前端开发 搜索推荐
前端必须掌握的设计模式——模板模式
模板模式(Template Pattern)是一种行为型设计模式,父类定义固定流程和步骤顺序,子类通过继承并重写特定方法实现具体步骤。适用于具有固定结构或流程的场景,如组装汽车、包装礼物等。举例来说,公司年会节目征集时,蜘蛛侠定义了歌曲的四个步骤:前奏、主歌、副歌、结尾。金刚狼和绿巨人根据此模板设计各自的表演内容。通过抽象类定义通用逻辑,子类实现个性化行为,从而减少重复代码。模板模式还支持钩子方法,允许跳过某些步骤,增加灵活性。
801 11