代码改变世界

一个简单例子的设计模式分析

2008-05-04 10:44  ubunoon  阅读(289)  评论(0编辑  收藏  举报

在看《设计模式》一书的Factory Method方法中有下面的例子:
class Creator
{
  pulic:
    virtual Product* Create(ProductId);
};

Product* Creator::Create(ProductId id)
{
  if( id == MINE )
    return new MyProduct;
  if( id == YOURS )
    return new YourProduct;
  // repeat for remaining products...
  return 0;
}

class MyCreator : public Creator
{
  pulic:
    virtual Product* Create(ProductId);
};


Product* MyCreator::Creat(ProductId id)
{
  if( id == YOURS )
    return new MyProduct;
  if( id == MINE )
    return new YourProduct;
  // N.B.:Switched YOURS and MINE

  if( id == THEIRS )
    return new TheirProduct;
  return Creator::Create(id); //called if all others fail
}

这两个例子为Factory Method中创建实例的方法例子,仔细分析,我们将会
看到,这里面有几个if语句,非常类似策略的方式,不同的参数具有不同的
工作方法(new不同的对象),对比Creator与MyCreator中的Create中的函
数,发现在子类MyCreator中通过调用Creator中的Create方法,而在另外
情况下,则是由子类自己实现,因此这两个类之间又具有Decorator设计模式。
也就是说,尽管这是一个非常简单的例子,但已经涉及了三种设计模式:
   工厂方法(Factory Method)、策略模式(Strategy)和装饰模式(Decorator)
从中我们也可以明显看到,各类模式是相互间穿插在一起的,相互作用,形成一个整体。



ubunoon
blog:http://ubunoon.cnblogs.com