组合模式(Composite Pattern)是一种结构型设计模式。
它使用对象组合的方式,将对象组合成树形结构以表示“部分-整体”的层次结构。
组合模式允许客户端以一致的方式处理单个对象以及组合对象。
主要包含以下内容:
Component(抽象组件):定义所有组件的公共接口。
Leaf(叶组件):实现 Component 接口,表示叶子节点对象。
Composite(组合组件):表示包含子组件的组合对象。
Client(客户类):在客户端使用组合对象的时候使用 Component 接口。
一个简单的demo如下:
python
Copy
from abc import ABC, abstractmethod
class Component(ABC):
@abstractmethod
def operation(self):
pass
class Leaf(Component):
def operation(self):
pass
class Composite(Component):
def __init__(self):
self.children = []
def add(self, child):
self.children.append(child)
def remove(self, child):
self.children.remove(child)
def operation(self):
for child in self.children:
child.operation()
Client
c = Composite()
l1 = Leaf()
l2 = Leaf()
c.add(l1)
c.add(l2)
c.operation()
组合模式的优点:
符合单一职责原则
复杂性被移动到组合节点中
简化客户端代码
易于扩展新增组件
适用场景: 需要表示整体部分层次结构的场景。
结构清晰、层次分明,符合“开闭”原则。
有关组合模式,推荐以下资料:
经典参考:
《设计模式:可复用面向对象软件的基础》一书中对组合模式的介绍。是理解组合模式的基础。
博客文章:
虞义德的文章《【设计模式】组合模式》,比较通俗易懂。
https://blog.csdn.net/yoyoketang/article/details/23878477
Jay的文章《【python】组合模式(composite)》,提供简单的Python 实现。
https://blog.csdn.net/cunzhiye/article/details/72354897
赵凯的文章《Python组合模式》,提供更完整的Python 实现与示例。
https://www.jianshu.com/p/701b1f209527
视频教程:
慕课网的组合模式视频,提供了C++、Java两种语言的示例:
https://www.imooc.com/learn/777
皮喜学院的组合模式视频,详细介绍UML图和代码实现
https://www.pixixueyuan.com/course/769
GitHub 项目:
示例项目结合 OpenCV 和深度学习,具有参考价值:
https://github.com/netjoint/composite
总的来说,书籍介绍组合模式的思想和原理,而博客和视频会更侧重代码实现。
多种语言的示例也能起到互补作用。
希望以上资源可以帮助您学习和理解组合模式!
组合模式的思想相对简单,重在多查阅源代码示例,掌握不同语言的实现。