适配器模式:定义:Convert the interface of a class into another interface clients expect. Adapter lets classes work together that couldn’t otherwise because of incompatible interfaces.(将一个类的接口变换成客户端所期待的另一种接口,从而是原本因接口不匹配而无法在一起工作的两个类能够在一起工作。)
适配器模式在现在开发中其实就是在不修改原来已经成熟的代码模块来进行使用。如假设A公司有一款成熟的聊天软件,现在它想做一款游戏,游戏里面要可以聊天,如果我们对这个游戏的聊天功能进行重新开发,那无疑是非常浪费时间的,那么我们就可以使用这款聊天软件的聊天功能的代码,我们只需要添加一个适配器类,将聊天软件里面的方法转为游戏需要的方法。
我们先实现对象适配器:
类图为:
实现:代码只是用来做基本的实现,所以没有写具体的功能
//成熟的聊天类(可以被复用)
class Chat
{
public:
void CreateRipeChat()
{
cout<<"实现聊天功能"<<endl;
}
};
//抽象游戏聊天类
class GameCaht
{
public:
virtual void CreateChat() = 0;
};
//聊天适配器类
class CahtAdapter : public GameCaht
{
private:
Chat * m_chat;
public:
//构造函数,创建一个需要复用的聊天类对象
ChatAdapter()
{
m_chat = new Chat();
}
//销毁需要复用的聊天类对象
~ChatAdapter()
{
if( NULL != m_chat )
{
delete m_chat;
m_chat = NULL;
}
}
void CreateChat()
{
m_chat->CreateRipeChatt();
}
};
类适配器的实现:
类图:
代码实现:
class Chat
{
public:
void CreateRipeChat()
{
cout<<"实现聊天功能"<<endl;
}
};
//抽象游戏聊天类
class GameCaht
{
public:
virtual void CreateChat() = 0;
};
class CahtAdapter : public GameCaht,Caht
{
public:
void CreatChat()
{
CreateRipeChat();
}
};
无论是对象适配器模式还是类适配器模式都具有如下优点:
(1) 将目标类和适配者类解耦,通过引入一个适配器类来重用现有的适配者类,无须修改原有结构。
(2) 增加了类的透明性和复用性,将具体的业务实现过程封装在适配者类中,对于客户端类而言是透明的,而且提高了适配者的复用性,同一个适配者类可以在多个不同的系统中复用。
(3) 灵活性和扩展性都非常好,通过使用配置文件,可以很方便地更换适配器,也可以在不修改原有代码的基础上增加新的适配器类,完全符合“开闭原则”。
(1) 将目标类和适配者类解耦,通过引入一个适配器类来重用现有的适配者类,无须修改原有结构。
在现在的开发中是适配器模式主要应用于复用已经写好的功能模块等等。在现在的开发中广泛运用。
以上内容纯粹属于个人理解,如果有错误,感谢大家的指正,谢谢!