Factory Methory 

1. 意图
定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使一个类的
实例化延迟到其子类。

 

怎么理解呢?

1)工厂("Factory")就是用来“Create Product”的,所以它需要定义一个用于Create Object的接口。

      还记得面向对象设计的原则不,我们的编程对象是接口,而不是具体实现。

2)我们用子类来具体的创建对应的对象。为什么要这要呢?  原因很简单:对等。就像TW政府与中共打交道的时候,

     最关心的是,你称我为“台湾省”还是“中华民国”。言归正传,假如让一个Factory类去创建对象,那它就可不干了,

     因为你对外就暴露了一个接口,创建一个“对象”,但它不知道该用户到底需要创建什么样子的对象。

     一个解决方案就是:让我的具体的分厂去具体生产具体的东西,这要也对等了:顶层的Factory类对应于产品的抽象类,具体的factory子类生产具体对应产品。

 

   说了这么多来举一个例子:

   抽象产品:图像 CGraph

   具体产品:矩形(CRectangle:CGraph),圆(CCicle:CGraph) (2D图形)

 

   抽象工厂:CGraphFactory 其中声明了一个方法:CGraph * CreateGraph([GraphID]) = 0; (参数化工厂方法)

   具体工厂:C2DGraphFactory专门用于生产2DGraph。

   具体实现 CGraph *CreateGraph([GraphID])

               {

                   switch(GraphID)

                   {

                       case RECTANGLE:

                               return new CRectangle;

                               break;

                   }

              }

  

   补充一些知识:

   下面是Factory Method模式的另外两种效果:

   1 ) 为子类提供挂钩( h o o k)

   2) 连接平行的类层次

 

  实现时需要注意的事项:

  1)可以参数化工厂方法,或者用类模板

  2)命名规则问题