积木

No sub title

  C++博客 :: 首页 :: 联系 :: 聚合  :: 管理
  140 Posts :: 1 Stories :: 11 Comments :: 0 Trackbacks

常用链接

留言簿(1)

我参与的团队

搜索

  •  

最新评论

阅读排行榜

评论排行榜

设计模式学习总结之五

七:Decorator模式(即:装饰模式)

 (注2)假设有这样的一个问题存在(其实现实开发中,非常经常遇到):基类BasicClassX有N个的派生类。因为它们没有功能接口void UnknowFunction(void);
按正常的。我们的处理方法,(1) 可以通过直接修改BasicClassX基类,在此添加virtual void UnknowFunction(void);虚接口并实现,然后所有derived
class中均可见。(2) 又或是在BasicClassX基类,添加了纯虚接口,然后在具体某派生类中进行了实现。在实现使用中,用该derived class来处理。
 (注3)但这样做会有这样的问题存在:a) 会有可能让继承的深度,变的很深。系统的类将变的很多,很复杂。b) 类的结构也将变的复杂化。(因为现
在是增加个接口,以后要是又有其他的接口功能需要添加了???) c) 无形中,会加重基类的负担。因为必须得保证扩展该接口,否则基类看不到该接
口。
 (注1)为了解决上面的问题。Decorator模式就可以帮助我们很轻松地解决。我们实现一个Decorator类。该类,只要引用一个BasicClassX指针对象即可。
然后在Decorator类中,扩展功能接口,这样,新扩展的功能就与BasicClassX的相关类,无任何关系。只是在BasicClassX相关类需要该扩展接口的地方,
使用Decorator类来处理即可。就相当于BasicClassX的对象(或是它的derived class object)委托Decorator来实现处理一样。但又同时像是将BasicClassX
对象与Decorator对象进行组合在一起使用。从而达到新接口的扩展作用。Decorator模式就是这么回事。
 下面简要提炼下Decorator类的设计
 SubClassA : BasicClassX;
 SubClassB : BasicClassX;
 SubClassC : SubClassA;
 ...
 SubClassN : ... : BasicClassX;

 class Decorator : BasicClassX
 {
 public:
  Decorator(BasicClassX* pBObj){m_pBOjb = pBObj;}
  void DoOperate(void)
  {
   m_pBObj->DoOperator();
   // do new interface
   this->DoNewInterfaceFunction();
  }
  //new extened interface function
  void DoNewInterfaceFunction(void){//do something...}
  // new extened other interface function
  ...
  
  //write down other code in here you knowned.
  ...
 private:
  BasicClassX* m_pBObj;
 }
 个人认为,Decorator模式,你说它有用。它确实有用。说它没用。其实它也没用。为啥这样说了?因为它完全可以通过,继承,或者直接修改原有的类体系来
实现。但它的存在,也确实会让系统的思路清晰些。至少代码相对不会那么乱。

posted on 2011-05-17 01:16 Jacc.Kim 阅读(270) 评论(0)  编辑 收藏 引用 所属分类: 设计模式

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理