Composite Pattern妙在何处

Composite Pattern的精华所在

Composite pattern网上有很多资料和定义,这里就不详细阐述了。个人感觉,这种设计模式最主要的特点是:Composite 让clients 得以一致方式对待「个別物」和「合成物」。在这个设计模式中,个别物和合成物都有一个共同的父类,合成物中有一个容器(如Vector),容器类型是父类定义的类型。这种巧妙的设计让个别物和合成物都可以放置在同一个容器中。这就是Composite pattern巧妙的地方。

话不多说,上代码:

// An highlighted block
#include <iostream>
 #include <vector> 
 using namespace std;
class Component 
// lowest common 
{ 
	public: virtual void traverse() = 0; 
};
class Leaf: public Component
 { 
  	int value;
  public:
    Leaf(int val) 
    { 
    value= val;
     } 
    void traverse() 
     { 
     	cout<< value<< ' ';
     }
 }; 
class Composite: public Component 
 { 
     vector <Component*> children; 
     public: 
        void add(Component* ele)
         { 
        	 children.push_back(ele); 
         }
        void traverse()
           {
           	 for (inti = 0; i < children.size(); i++) 
            	children[i]->traverse();
            } 
 };
int main() 
{ 
	Compositecontainers[4];
	for (int i = 0; i < 4; i++) 
 		for (intj = 0; j < 3; j++) 
 			containers[i].add(newLeaf(i*3+j));
  	for (int i = 1; i < 4; i++) 
  		containers[0].add(&(containers[i]));
    for (int i = 0; i < 4; i++) 
  	 { 
   		containers[i].traverse(); cout<< endl; 
  	 }
} 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值