模式七:适配器模式(Adapter pattern)——接口转换

适配器模式

将一个类的接口,转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。

应用分析

主要功能是完成接口转换,通过适配器,将被适配者的接口转换成满足客户需求的接口。

客户使用适配器的过程如下:

客户通过目标接口调用适配器的方法对适配器发出请求;

适配器使用被适配者接口把请求转换成被适配者的一个或多个调用接口;

客户接收到调用的结果,但并未察觉这一切是适配器在起转换作用。

适配器接口分为:对象适配器接口和类适配器接口。

对象适配器——通过组合或委托被适配者实现

类适配器——通过继承被适配者实现

代码分析

//Adapter.h
#ifndef ADAPTER_H
#define ADAPTER_H

#include <iostream>

class Duck//鸭子抽象类
{
public:
	virtual void quack()=0;
	virtual void fly()=0;
};

class Turkey//火鸡抽象类
{
public:
	virtual void gobble()=0;
	virtual void tfly()=0;
};

class MallardDuck:public Duck//鸭子实体类
{
public:
	void quack()
	{
		std::cout<<"Duck Quack"<<std::endl;
	}
	void fly()
	{
		std::cout<<"Duck Fly"<<std::endl;
	}
};

class WildTurkey:public Turkey//火鸡实体类
{
public:
	void gobble()
	{
		std::cout<<"Turkey gobble"<<std::endl;
	}
	void tfly()
	{
		std::cout<<"Turkey Fly"<<std::endl;
	}
};

class TurkeyObjectAdapter:public Duck//对象适配器
{
private:
	Turkey *t;
public:
	TurkeyObjectAdapter(Turkey *t)
	{
		this->t=t;
	}
	void quack()
	{
		t->gobble();
	}
	void fly()
	{
		t->tfly();
	}
};

class TurkeyClassAdapter:public Duck,private WildTurkey//类适配器
{
public:
	void quack()
	{
		this->gobble();
	}
	void fly()
	{
		this->tfly();
	}
};

#endif


//Main.cpp
//测试程序
#include "Adapter.h"

void print_Duck(Duck *d)
{
	d->quack();
	d->fly();
}

int main()
{
	Duck *d=new MallardDuck();//定义鸭子对象
	print_Duck(d);

	Turkey *t=new WildTurkey();//定义火鸡对象

	Duck *ob_t=new TurkeyObjectAdapter(t);//对象适配器
	print_Duck(ob_t);

	Duck *cl_t=new TurkeyClassAdapter();//类适配器
	print_Duck(cl_t);


	return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值