现在的位置: 首页 > 综合 > 正文

设计模式入门学习 组合模式

2018年01月11日 ⁄ 综合 ⁄ 共 980字 ⁄ 字号 评论关闭

  组合模式,Composite:上一篇中提过,和职责链模式结合使用。

  定义:将对象以树形结构组织起来,以达成“部分-整体”的层次结构,使得客户端对单个对象和组合对象的使用具有一致性。

  组成:

  抽象构件:为组合中的对象声明接口,也可以提供接口的缺少行为。

  树叶构件:在组合中表示叶子节点对象,没有子节点。实现抽象构件中的接口。

  树枝构件:在组合中表示分支节点对象,有子节点。实现抽象构件中的接口,并存储子构件。

  这也是一个普遍应用的设计模式,浏览器UI框架中的控件就是这样的一个树状结构:父控件,子控件,子控件下面还可以放入再下一层子控件。

示例代码:

//Composite,这是一个单元测试框架
class TestResult
	{
	/*测试结果信息,略*/
public:
	bool iShouldStop;
	};

//抽象构件
class Test
	{
public:
	virtual void RunTest(TestResult& aRes) = NULL;
	virtual void AddTest(Test* aTest)
		{
		iTestList.Append(aTest);
		}
	virtual void RemoveTest(){ /*从表中删除略*/ }
	
protected:
	RPointerArray<Test> iTestList;//动态数组
	};

//树枝构件
class TestSuite : public Test
	{
public:
	void RunTest(TestResult& aRes)
		{
		//遍历数组,调用所有RunTest
		for (TInt i = 0; i < iTestList.Count(); i++)
			{
			Test* test = iTestList[i];
			test->RunTest(aRes);
			if (aRes.iShouldStop)
				return;
			}
		}
	
private:
	
	};

//叶子构件
class TestCase : public Test
	{
public:
	void RunTest(TestResult& aRes)
		{
		/*做测试,修改TestResult*/
		}
	};

  Composite模式几乎在所有面向对象系统中都有使用。

  相关模式:

  职责链Respoinsibility of Chain模式、修饰Decorator模式、Flyweight让你共享组件、Itertor可用来遍历、Visitor让操作和行为局部化。

抱歉!评论已关闭.