适配器模式(Adapter)

来源:互联网 发布:tcl电视软件升级 编辑:程序博客网 时间:2024/05/24 04:34

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
原创粉丝点击