适配器模式

适配器模式

定义:将某个类的接口转换为接口客户所需的类型。换句话说,适配器模式解决的问题是,使得原本由于接口不兼容而不能一起工作、不能统一管理的那些类可以在一起工作、可以进行统一管理。做法是将类自己的接口包裹在一个已存在的类中。

举例:这里有厨师接口 ICooker、程序员接口 IProgrammer,分别用于定义他们各自工种的具体工作。然后又定义了全聚德的厨师 QjdCooker、京东的程序员JdProgrammer。这些不同的工种所做的工作都各自是不同的,无法进行统一管理,协同工作。所以,此时就需要定义一个员工适配器接口 IWorkerAdapter,用于将这些不同的工种进行统一管理。

使用场景:适配器模式主要应用于希望复用一些现存的类,但是接口又与复用环境要求不一致的情况。

角色:
目标对象:target
被适配对象:adaptee
适配器:adapter

类模式适配器

class Target//目标对象
{
public:
    Target();
    virtual ~Target();
    virtual void Request();//定义标准接口
 };
 
void Target::Request()
{
    cout << "Target::Request()" << endl;
}

class Adaptee//被适配对象
{
public:
    Adaptee();
    ~Adaptee();
    void SpecificRequest();
};

void Adaptee::SpecificRequest()
{
    cout << "Adaptee::SpecificRequest()" << endl;
}

class Adapter:public Target,private Adaptee//类模式适配器
{
public:
    Adapter();
    ~Adapter();
    virtual void Request();//实现Target定义的Request接口
};

void Adapter::Request()
{
    cout << "Adapter::Request()" << endl;
    this->SpecificRequest();
    cout << "----------------------------" <<endl;
}

int main()
{
	//类模式Adapter
	Target* pTarget = new Adapter();
	pTarget->Request();
	return 0;
}

对象模式适配器

class Target//目标对象
{
public:
    Target();
    virtual ~Target();
    virtual void Request();//定义标准接口
 };
 
void Target::Request()
{
    cout << "Target::Request()" << endl;
}

class Adaptee//被适配对象
{
public:
    Adaptee();
    ~Adaptee();
    void SpecificRequest();
};

void Adaptee::SpecificRequest()
{
    cout << "Adaptee::SpecificRequest()" << endl;
}

//对象模式,适配器类,继承Target类,采用组合的方式实现Adaptee的复用
class Adapter1:public Target
{
public:
    Adapter1(Adaptee* adaptee);
    Adapter1();
    ~Adapter1();
    virtual void Request();//实现Target定义的Request接口
private:
    Adaptee* _adaptee;
};

//对象模式的Adapter
Adapter1::Adapter1():_adaptee(new Adaptee)
{
}

Adapter1::Adapter1(Adaptee* _adaptee)
{
    this->_adaptee = _adaptee;
}

int main()
{
    //对象模式Adapter1
    Adaptee* ade = new Adaptee();
    Target* pTarget1= new Adapter1(ade);
    pTarget1->Request();

    //对象模式Adapter2
    Target* pTarget2 = new Adapter1();
    pTarget2->Request();
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值