Factory——工厂方法

 一、定义

        GOF上对工厂方法的意图如此描述:定义一个用于创建对象的接口,让子类决定实例化哪个类。Factory Method使一个类的实例化延迟到其子类。

         作为类的开发者,我们通常会在类中提供构造器方法以便客户代码实例化该类。然而有时候,客户代码并不清楚该对几个类中的哪一类进行实例化。可以用工厂模式定义一个用于创建对象的接口,同时控制对哪个类进行的实例化。


二、应用场景

         工厂方法模式的特征是:

         (1)方法创建了一个新的对象;

         (2)方法的返回类型为一个抽象类或接口;

         (3)有若干个类实现了上述抽象类型。

       

三、类图


                             

四、例子

       (1)工厂方法最典型的一个例子就是在迭代器模式中的应用,这里的工厂方法链接了两个平行的类层次结构。

        当一个类将它的一些职责委托给一个独立的类时,就产生了平行类层次。迭代器模式中,各个组合类型将遍历元素的操作独立出

来,形成了迭代器类层次。

        每个组合类型都和一个相应类型的迭代器对应。组合类的对象需要实例化对应自己的迭代器(通过CreateIterator方法),这里的

CreateIterator方法就是工厂方法。 具体代码可以看之前的迭代器模式日志

      (2)工厂方法还能为子类提供hook,用工厂方法在一个类的内部创建对象通常比直接创建对象更为灵活。

        GOF的代码示例里利用了MazeGame的例子,基类提供了Maze,Room,Wall等的工厂方法默认实现。子类通过重载这些方法,

可以利用createMaze方法创建带有炸弹的迷宫。这样更有灵活性,由子类决定实例化哪个类型的迷宫组件。

 

posted on 2014-01-07 16:25  我的小人生  阅读(238)  评论(0编辑  收藏  举报