使用时机:当一系列功能存在类似操作的时,而它的实现功能又可能扩展增加新类时,且无须修改客户端(即应用部分)。
简单工厂模式即为:
把操作实例通过工厂创建接口创建出来,使用者只使用一个标准的操作接口而非实际应用。这个的好处是操作接口内部任意的改变或扩展都不会影响到调用者。
如:
class Object
{
public:
// 对象死亡操作
virtual void Dead() = 0;
private:
int m_nHP;
int m_nMP;
};
class Npc :
public Object
{
public:
void void Dead() { printf( "NPC:%d已经死亡!", m_nId ); }
private:
int m_nId;
};
class Player:
public Object
{
public:
void void Dead() { printf( "玩家:%d已经死亡!", m_nId ); }
private:
int m_nId;
};
class Monster:
public Object
{
public:
void void Dead() { printf( "怪物:%d已经死亡!", m_nId ); }
private:
int m_nId;
};
class ObjFactory
{
public:
static Object CraeteObject( int type )
{
switch( type )
{
case 1: // 玩家
{
return new Player();
}
break;
case 2: // 怪物
{
return new Monster();
}
break;
case 3: // NPC
{
return NPC();
}
default:
;
}
}
};
// 这里只用利用多态提供一个Object的接口而非实际的 Player 对象,这个
// 就算Player内部改变也不会影响到这里
// 创建玩家
Object obj = ObjFactory.CraeteObject( 1 );
obj.Dead();
// 创建NPC
Object obj = ObjFactory.CraeteObject( 3 );
obj.Dead();