std;
Product
{
:
show()=0;
};
Product
{
:
show()
{
;
};
};
Product
{
:
show()
{
;
};
};
Factory
{
:
virtual
Product * createProduct()=0;
};
FactoryA :
Factory
{
:
Product * createProduct()
{
ProductA();
};
};
FactoryB :
Factory
{
:
Product * createProduct()
{
ProductB();
};
};
#endif
#include "Factory.h"
main()
{
FactoryA * factoryA =
FactoryA();
Product * pa = factoryA->createProduct();
pa->show();
FactoryB * factoryB =
FactoryB();
Product * pb = factoryB->createProduct();
pb->show();
factoryA;
factoryB;
pa;
pb;
0;
抽象工厂模式:现在我们的产品类都是继承自Product的,如果有一个产品不是Product的子类怎么办呢?这个时候就用到了抽象工厂模式,这个模式是工厂方法模式的叠加,其他的东西类似,看下代码就清楚了。
84
85
86
87
88
89
90
91
//产品类A类的基类
ProductA
ProductA1 :
ProductA
"ProductA1n"
ProductA2 :
ProductA
"ProductA2n"
//产品类B类的基类
ProductB
show()=0;
};
ProductB1 :
ProductB
{
show()
{
"ProductB1n"
;
};
};
ProductB2 :
ProductB
{
show()
{
"ProductB2n"
;
};
};
Factory
{
:
ProductA * createProductA()=0;
ProductB * createProductB()=0;
};
Factory
{
:
ProductA * createProductA()
{
ProductA1();
};
ProductB * createProductB()
{
ProductB1();
};
};
Factory
{
:
ProductA * createProductA()
{
ProductA2();
};
ProductB * createProductB()
{
ProductB2();
};
};
#endif
|
以上是对工厂模式的说明,下面看看工厂模式在Cocos2d-x中的应用,引用Cocos2d-x高级开发教程一书中的话:“工厂方法是程序设计中一个经典的设计模式,指的是基类中只定义创建对象的接口,将实际的实现推迟到子类中。在这里,我们将它稍加推广,泛指一切生成并返回一个对象的静态函数”。
一切生成并返回一个对象的静态函数就是一个工厂方法,这样的话,Cocos2d-x中是不是有很多这样的方法?比如创建场景的createScene函数,创建多数对象的create函数,一个经典的工厂方法如同这样:
7
Sprite* factoryMethod()
{
Sprite* ret =
Sprite();
ret->autorelease();
ret;
}
|
在我们自己的程序中使用工厂模式的应用场景可以是这样:我们要创建很多的子弹,如果使用Sprite的create方法每次都会分配内存,子弹销毁的时候释放内存,这样的创建方法效率不高,如果我们使用工厂方法来完成这件事情,自己的工厂方法立面维护一个容器,容器里存放被销毁的子弹,需要新的子弹的时候,从容器中拿出来。根据子弹的类型,更换纹理,重置位置,重置飞行速度和方向,然后发射出去。如果容器中没有被销毁的子弹,就初始化一个,这样的话就不用每次new、delete了,内存中的子弹数量是一定的,可以提高程序的效率。 (编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|