适配器模式

大家知道,输电线用的是高压电,家庭照明使用的220V低压电,那怎么办呢,大家都知道了,使用变压器,其实也可叫适配器。
适配器模式,将一个类的接口转换成客户希望的另外一个接口。Adapter 模式使得原本由于不兼容而不能一起工作的那些类可以一起工作。

适配器模式主要解决的问题:东西在你面前,却不同使用,短时间又无法改造他,于是就需要想办法适配它。在软件开发中,也就是系统的数据和行为都正确,但接口不符合,我们应该考虑到用适配器,目的是使控制范围之外的一个原有对象与某个接口匹配。适配器模式主要应用于希望复用某些现存的类,但是就扣又与复用环境要求不一致的情况。适配器模式主要有两类,类型适配器模式和对象适配器模式。


#include<iostream>
#include<string>
using namespace std;
class Player//我们的目标类,所有的运动员的抽象基类
{
protected:
	string name;
public:
	Player(string _name) :name(_name)
	{}
	virtual void Attack() = 0;
	virtual void Defence() = 0;
	virtual ~Player()
	{}
};
class Forwards : public Player//可以正常使用的,不需要适配的
{
public:
	Forwards(string _name) : Player(_name)
	{
	}
	void Attack()
	{
		cout << "前锋" << name << "进攻" << endl;
	}
	void Defence()
	{
		cout << "前锋" << name << "防守" << endl;
	}
};
class Center : public Player//可以正常使用的,不需要适配的
{
public:
	Center(string _name) : Player(_name)
	{
	}
	void Attack()
	{
		cout << "中锋" << name << "进攻" << endl;
	}
	void Defence()
	{
		cout << "中锋" << name << "防守" << endl;
	}
};
class ForeignCenter//一个外籍的运动员,没有继承Player,因此无法使用Player的接口,但是他也有player的所有能力,需要适配
{
private:
	string name;
public:
	ForeignCenter(string _name) :name(_name)
	{}
	void Attack()
	{
		cout << "外籍中锋" << name << "进攻" << endl;
	}
	void Defence()
	{
		cout << "外籍中锋" << name << "防守" << endl;
	}
};
class Translator :public  Player//这是一个适配器,让外籍运动员和本地看起来没什么两样,自然需要继承player
{
private:
	ForeignCenter *f;//需要适配的对象
public:
	Translator(string name) :Player(name)
	{
		f = new ForeignCenter(name);
	}
	void Attack()
	{
		f->Attack();//
	}
	void Defence()
	{
		f->Defence();
	}
	~Translator()
	{
		delete f;
	}
};
int main()
{
	Player *p1 = new Center("乔丹");//不需要适配的运动员
	p1->Attack();
	p1->Defence();
	Player *pt = new Translator("姚明");//适配,然后就是Player了,大家都一样了
	pt->Attack();//
	pt->Defence();
	delete p1;
	delete pt;
}
    我们以篮球运动员为例,无论是前锋还是后卫,还是中锋,都是运动员,这个就是客户所期待的接口,也就是Adapter,现在来了一个外籍中锋Adaptee,但是他不懂本国语言,但是他必须得有运动员所需要的全部技能(也就是必须能够实现Target中的所有动作),现在来了一个翻译Adapter来给外籍的翻译。
    适配器模式有哪些使用场景呢?在软件开发中,有的时候我们要使用老系统的一些东西怎么办呢?重新开发太麻烦了,那么就可以使用适配器模式,使其适配新的接口。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值