适配器模式(Adapter)

1.目的

        某个对象(People1)有一个接口(getAge()),当我们想使用它的时候发现,我们需要用到这个接口的场景(client的setage())与这个接口类似却并不相同(入参、返回值等等限制),不能直接使用,这个时候,我们不用修改目标类的实现(增加或者修改类的接口),而是我们就构造一个适配器类(Wrapper),持有这个目标对象(people1),并在这个类中,做接口的转换,将目标对象的接口转换成我们需要的接口形式。

       通过Wrapper方式,就可以做到对目标对象符合开闭原则,即不用修改目标对象的代码,而实现了接口的匹配。

       适配器去实现(继承)待适配的接口,适配器与真正的接口实现者有两种实现方式,一种是委托,适配器将接口委托给接口实现者去实现,另外就是适配器去继承接口实现者的接口,并在里面做出适配

    

 

2.代码

Adapter,h

#ifndef ADAPTER_H_
#define ADAPTER_H_

class People1
{
public:
	People1(int);
	int getAge();
private:
	int age;
};

class Wrapper
{
public:
	Wrapper(People1&);
	char getAge();
private:
	People1* people;
};

class Client
{
public:
	void setAge(char);
	char getAge();
private:
	char age;
};



#endif /* ADAPTER_H_ */


 

Adapter.cpp

#include "Adapter.h"
#include <iostream>

using namespace std;

People1::People1(int arg):age(arg)
{}

int People1::getAge()
{
	return age;
}

Wrapper::Wrapper(People1& arg):people(&arg)
{}

char Wrapper::getAge()
{
	return (char)people->getAge();
}

void Client::setAge(char arg)
{
	age = arg;
}

char Client::getAge()
{
	return age;
}

void adapter()
{
	People1 boy(11);

	Wrapper wrapper(boy);

	Client client;

	client.setAge(wrapper.getAge());

	cout<<client.getAge()<<endl;

}


 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值