组合模式(Composite)应用背景
在绘图编辑器的应用程序中,用户可以使用简单图形组件创建复杂的图表,也可以组合多个简单图形形成较大的组件,这些新产生图形组件又可以组合成为更大的组件,如此产生不断递归层次。类似情况也有在文件系统中,一个目录中可以包含单个独立文件和子文件夹,子文件夹中又可以包含单个独立文件和子文件夹等等。 软件设计中,针对这种“部分–整体”的层次结构,提出了组合模式描述。
组合模式将对象组合成树形结构以表示“部分–整体”的层次结构,组合对象与基本对象拥有相同的接口,用户对单个对象和组合对象的使用具有一致性,不必关心到底是处理一个单个对象还是处理一个组合对象。简单可以理解为:是把一些现有的对象或者元素,经过组合后组成新的对象,新的对象提供内部方法,可以很方便的完成这些元素或者内部对象的访问和操作,也可以把组合对象理解成一个容器,容器提供各种访问其内部对象或者元素的API,用户只需要使用这些方法即可。
组合模式(Composite)UML图
组合模式(Composite)代码示例
class Component
{
public:
Component(std::string name):m_strName(name){};
virtual ~Component(){};
public:
virtual void Operation() = 0;
virtual void Add(Component* pObj) = 0;