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)命名规则问题
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:设计模式之我的理解—-创建型模式:工厂方法 - Python技术站