Day47. 组合模式

本文同步更新於blog

Composite Pattern

允许将对象组合成树形结构来表现整体/部分层次结构。

组合能让客户以一致的方式处理个别对象以及对象组合。


组合模式会将类别分为两类:
分别是枝节点类别 (Composite)叶节点类别 (Leaf)

其中叶节点类别没有子节点。


根据 组合介面 (Component) 设计的不同,又可分出两种类型。

  • 透明方式 (uniformity)
    於介面宣告管理子物件的方法 (Add, Remove),
    使得 枝节点类别 (Composite)叶节点类别 (Leaf) 没有区别。
    缺点为 叶节点类别 (Leaf) 本身不具备管理子物件的方法,实现它是没有意义的。

  • 安全方式 (type safety)
    不於介面宣告管理子物件的方法,而是在 枝节点类别 (Composite) 中宣告。
    缺点为客户端调用时须增加对应的判断。


优点
面对树形架构时,能够使用多态性递回性的作法。

缺点
由於介面须同时满足枝节点与叶节点,会使程序码复杂度提高。


与其他模式的比较:

[迭代器模式]:
运用组合模式,可以与迭代器模式产生良好的协同作用。

[解译器模式]:
两者有着类似下表的对应关系。

解译器模式 组合模式
终端表达式 (Terminal Expression) 叶节点类别 (Leaf)
非终端表达式 (NonTerminal Expression) 枝节点类别 (Composite)

[装饰者模式]:
装饰者模式只有一个装饰过後的物件。
而组合模式有着许多个物件。


ʕ •ᴥ•ʔ:组合模式的目的就是实现树形结构。


<<:  [Day06] 什麽是摩尔投票法

>>:  Google Script+LINE 打造聊天机器人 #1-工具介绍

Day21 跟着官方文件学习Laravel-Encryption

大家好,今天要介绍 Laravel 其中一个功能'加密',我会将这个加密加入我的专案实作之中。lar...

[进阶指南] 传送 Ref ( Day24)

传送 ref 是一种自动把 ref 从一个 component 传递到它底下的其中一个 child...

30天打造品牌特色电商网站 Day.12 一定要有的导览列

导览列(Navigation)是每个网站必要且重要的元件,当使用者进到网页想马上找寻想要的资讯,好的...

资料人员来学C++ #随堂笔记 Day1

前情提要: 本人从事数据处理的工作大约四年之久,主要的语言为R、SQL and Python,身为数...

【Docker】01 安装与入门

1. 基本概念 image: 映像档。只能读取。可以从网路下载或是自己建立。 container: ...