在游戏开发中,我们经常用到适配器模式。比如:我们现在要做一个类似vs的平台,里面有众多游戏。但是这些游戏的接口和平台游戏的接口并不相同,该怎样办呢?
这个时候,我们可以用适配器模式。
适配器模式(adapter):将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
适配器模式有两种类型:类适配器模式和对象适配空对空模式,由于类适配器模式通过多重继承对一个接口与另一个接口进行匹配,但因为像JAVA,C#这些语言不支持多重继承,所以我们这里主要讲对象适配器。
对象适配器模式结构图如下:
//平台的游戏接口
class IFlatform
{
public:
//游戏平台把命令和逻辑数据捆绑在一起丢给游戏逻辑
virtual bool ExeGame(void*) = 0;
}
class IGameHandle;
//适配器把接口继承下来,但内部还是使用IGameHandle的东西
class CGameAdapter:public IFlatform
{
public:
CGameAdapter(IGameHandle* pGame){m_pGame = pGame;}
public:
virtual bool ExeGame(void*)
{
...
return m_pGame->ExeLogic(void*);
}
private:
IGameHandle* m_pGame;
}
class IGameHandle
{
public:
virtual bool ExeLogic(void*) = 0;
}
class CGame:public IGameHandle
{
public:
virtual bool ExeLogic(void*){...}
}
优点:
1、将目标类和适配器类解耦。
2、增加了类的透明性和复用性,将具体的实现封装在适配者类中,对于客户端类来说是透明的,而且提高了适配者的复用性。
3、灵活性和扩展性都非常好,符合开闭原则。
总结:
在双方接口都不太容易修改的时候,比较适合使用适配器模式。所以,在软件开发初,事先要预防接口不同的问题;在有小的接口不统一问题发生时,及时重构;当碰到无法改变原有设计和代码的时候,才考虑适配。