组合模式
将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象 的使用具有一致性。
角色:
- 抽象组件 (Component)
- 叶子组件 (Leaf)
- 复合组件 (Composite)
- 客户端 (Client)
适用场景: 表示对象的“部分-整体”层次结构(特别是结构是递归的) 希望用户忽略组合对象与单个对象的不同,用户统一地使用组合结构中的所有对象
优点: 定义了包含基本对象和组合对象的类层次结构 简化客户端代码,即客户端可以一致地使用组合对象和单个对象 更容易增加新类型的组件
组合模式(Composite Pattern)是一种结构型设计模式,它允许将对象组合成树状结构以表示“部分-整体”的层次结构。组合模式使得用户可以统一对待单个对象和组合对象,从而简化了客户端的代码。
在组合模式中,有以下几个关键角色:
- 组件(Component):定义了组合对象和叶子对象的共同接口,可以是抽象类或接口。它声明了一些操作方法,如添加子节点、删除子节点、获取子节点等。
- 叶子(Leaf):表示组合中的叶子对象,它没有子节点。它实现了组件的接口,但在具体的操作方法中可能会抛出异常或不做任何处理。
- 容器(Composite):表示组合中的容器对象,它可以包含子节点。容器对象实现了组件的接口,并提供了具体的操作方法,如添加子节点、删除子节点、获取子节点等。
使用组合模式可以将对象组织成树状结构,其中容器对象可以包含叶子对象和其他容器对象。客户端可以递归地遍历整个树状结构,对每个节点进行操作,而无需关心是叶子对象还是容器对象。
from abc import ABC, abstractmethod
# 组件接口
class Component(ABC):
@abstractmethod
def operation(self):
pass
# 叶子类
class Leaf(Component):
def operation(self):
print("执行叶子操作")
# 容器类
class Composite(Component):
def __init__(self):
self.children = []
def add(self, component):
self.children.append(component)
def remove(self, component):
self.children.remove(component)
def operation(self):
print("执行容器操作")
for child in self.children:
child.operation()
# 使用组合模式
leaf1 = Leaf()
leaf2 = Leaf()
composite1 = Composite()
composite1.add(leaf1)
composite1.add(leaf2)
leaf3 = Leaf()
composite2 = Composite()
composite2.add(leaf3)
composite2.add(composite1)
composite2.operation()