16.适配器模式



1适配器模式的核心内容是:

A:两种或多种不同类型的类。

B:通过适配器(Translator)让另外一种(ForeignCenter)协同另外一者工作。达到类似player的功能

2适配器模式的作用:让不是一种类型的类也同样执行类似相同类的动作。

3桥接模式具体描述

适配器(变压器)模式:把一个类的接口变换成客户端所期待的另一种接口

从而使原本因接口原因不匹配而无法一起工作的两个类能够一起工作。

适配类可以根据参数返还一个合适的实例给客户端。

 

在朋友聚会上碰到了一个美女Sarah,从香港来的,

可我不会说粤语,她不会说普通话,只好求助于我的朋友kent了,

他作为我和Sarah之间的Adapter,让我和Sarah可以相互交谈了

(也不知道他会不会耍我)。

4适配器模式类图

5.代码:

#include
<iostream>

#include
<string>

using
namespace
std;

//适配器(变压器)模式:把一个类的接口变换成客户端所期待的另一种接口

//,从而使原本因接口原因不匹配而无法一起工作的两个类能够一起工作。

//适配类可以根据参数返还一个合适的实例给客户端。

//

//在朋友聚会上碰到了一个美女Sarah,从香港来的,

//可我不会说粤语,她不会说普通话,只好求助于我的朋友kent了,

//他作为我和Sarah之间的Adapter,让我和Sarah可以相互交谈了

//(也不知道他会不会耍我)。

 

class
Player

{

public:

   
string
name;

   
Player(string
name)

   
{

       
this->name
= name;

   
}

   
virtual
void
attack() = 0;

   
virtual
void
defence() = 0;

};

 

//前锋,是Player类型的

class
Forwards :public
Player

{

public:

   
Forwards(string
name) :Player(name){}

   
void
attack()

   
{

       
cout <<
name <<
"
前锋进攻" <<
endl;

   
}

   
void
defence()

   
{

       
cout <<
name <<
"
前锋防守" <<
endl;

   
}

};

 

//中锋,同样是Player类型

class
Center :public
Player

{

public:

   
Center(string
name) :Player(name){}

   
void
attack()

   
{

       
cout <<
name <<
"
中锋进攻" <<
endl;

   
}

   
void
defence()

   
{

       
cout <<
name <<
"
中锋防守" <<
endl;

   
}

};

 

//后卫,同样是Player

class
Backwards :public
Player

{

public:

   
Backwards(string
name) :Player(name){}

   
void
attack()

   
{

       
cout <<
name <<
"
后卫进攻" <<
endl;

   
}

   
void
defence()

   
{

       
cout <<
name <<
"
后卫防守" <<
endl;

   
}

};

 

/*************************************************

这里的ForeignCenter本来和Player并非同种类型的,本来不可以直接操作

但是它和Player有相同的特征

**************************************************/

class
ForeignCenter

{

public:

   
string
name;

   
ForeignCenter(string
name)

   
{

       
this->name
= name;

   
}

   
void
myAttack()

   
{

       
cout <<
name <<
"
外籍中锋进攻" <<
endl;

   
}

   
void
myDefence()

   
{

       
cout <<
name <<
"
外籍后卫防守" <<
endl;

   
}

};

 

/***************************************************

下面的相当于适配器,将不同类型的类也同样能够互相工作

****************************************************/

class
Translator :public
Player

{

private:

   
ForeignCenter *fc;

public:

   
Translator(string
name) :Player(name)

   
{

       
fc =
new
ForeignCenter(name);

   
}

   
void
attack()

   
{

       
fc->myAttack();

   
}

   
void
defence()

   
{

       
fc->myDefence();

   
}

};

 

int
main()

{

   
//创建一个中锋

   
Player *p1
= new
Center("李俊宏");

   
p1->attack();

   
p1->defence();

 

   
Translator *tl
= new
Translator("姚明");

   
tl->attack();

   
tl->defence();

   
cin.get();

   
return 0;

}

运行结果如下:

时间: 2024-09-02 06:40:40

16.适配器模式的相关文章

适配器模式之对象适配器

问题导入:比如有A型螺母和B型螺母,那么用户可以再A型螺母上直接使用按着A型螺母生产的A型螺丝,同样也可以在B型螺母上直接使用按着B型 螺母标准生产的B型螺丝.但是由于A型螺母和B型螺母的标准不一样,用户在A型螺母上不能直接使用B型的螺丝,反之也一样.该如何达到这个目的呢? 使用适配器就可以解决这个问题:生产一种"A型螺母适配器",这种A型螺母适配器的前端符合A型螺母标准要求,可以拧在A型螺母上,后端又焊接了一个B型螺母.这样用户就可以借助A型螺母适配器在A型螺母上使用B型的螺丝了.

解读设计模式----适配器模式(Adapter Pattern)

在金庸笔下,三大神功都是难得之宝,多少人为得到他而......,仔细的分析下这三大神功,还是北冥较好,呵呵.我们从软件设计的角度来看,这不知算不算得上是一种复用(功力复用)的思想,只不过有点残忍罢.而在软件设计领域里,"复用"在某些时候也会出现很多问题,比如平台不兼容,开发语言不同或是接口不同等多种原因,弄得不好会不会出现既浪费了别人的现有资源,而自己的系统又无法完成呢?这有点像吸星----损人又损己. 企图将设计做好,就能够一劳永逸地坐享其成,这样的愿望就好上面所提到的吸星神功一般,

PHP设计模式之适配器模式代码实例

  这篇文章主要介绍了PHP设计模式之适配器模式代码实例,本文讲解了目标.角色.应用场景.优势等内容,并给出代码实例,需要的朋友可以参考下 目标: 可将一个类的接口转换成客户希望的另外一个接口,使得原本不兼容的接口能够一起工作.通俗的理解就是将不同接口适配成统一的API接口. 角色: Target适配目标,该角色定义把其他类转换为何种接口,也就是我们的期望接口. Adaptee被适配者,就是需要被适配的接口. Adapter适配器,其他的两个角色都是已经存在的角色,而适配器角色是需要新建立的,它

[Head First设计模式]身边的设计模式——适配器模式

系列文章 [Head First设计模式]山西面馆中的设计模式--装饰者模式 [Head First设计模式]山西面馆中的设计模式--观察者模式 [Head First设计模式]山西面馆中的设计模式--建造者模式 [Head First设计模式]饺子馆(冬至)中的设计模式--工厂模式 [Head First设计模式]一个人的平安夜--单例模式 [Head First设计模式]抢票中的设计模式--代理模式 [Head First设计模式]面向对象的3特征5原则 [Head First设计模式]鸭子

Java设计模式----初识适配器模式

[正文] 我们知道,Android中最重要也是最难用的UI控件就是ListView列表控件,而要想灵活运用它,则必须要用到适配器adapter,所以,我觉得还是很有必要来学习一下Java当中的适配器模式(不管以后能不能用到),毕竟Java语言是Android开发很重要的一个基础. 完全了解适配器模式,有很多知识要学习,例如:适配器模式有类的适配器模式和对象的适配器模式两种不同的形式.但作为初学者,我就简单学习一下配器模式入门知识吧,以后会不断完善.希望奋斗在码农路上的童鞋们莫吐槽→_→ 一.适配

第6章 适配器模式(Adapter Pattern)

原文 第6章 适配器模式(Adapter Pattern) 概述 将一个类的接口转换成客户希望的另外一个接口.Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作.  解决的问题 即Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作. 注:        在GoF的设计模式中,对适配器模式讲了两种类型,类适配器模式和对象适配器模式.由于类适配器模式通过多重继承对一个接口与另一个接口进行匹配,而C#.java等语言都不支持多重继承,因而这里只是介绍

初识Java设计模式适配器模式_java

[正文] 我们知道,Android中最重要也是最难用的UI控件就是ListView列表控件,而要想灵活运用它,则必须要用到适配器adapter,所以,我觉得还是很有必要来学习一下Java当中的适配器模式(不管以后能不能用到),毕竟Java语言是Android开发很重要的一个基础.  完全了解适配器模式,有很多知识要学习,例如:适配器模式有类的适配器模式和对象的适配器模式两种不同的形式.但作为初学者,我就简单学习一下配器模式入门知识吧,以后会不断完善.希望奋斗在码农路上的童鞋们莫吐槽→_→  一.

设计模式之禅之设计模式-适配器模式

一:适配器模式的定义        --->一个补救模式,这种模式可以让你从因业务扩展而系统无法迅速适应的苦恼中解脱而出.        --->贫血对象和充血对象,这两个名词很简单,在领域模型中分别叫做贫血领域模型和充血领域模型,有什么区别呢?一个对象如果不存储实体状态以及对象之间的关系,该对象就叫做贫血对象,对应的领域模型就是贫血领域模型,有实体状态和对象关系的模型就是充血领域模型        --->将一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起

【设计模式】—— 适配器模式Adapter

模式意图 如果已经有了一种类,而需要调用的接口却并不能通过这个类实现.因此,把这个现有的类,经过适配,转换成支持接口的类. 换句话说,就是把一种现有的接口编程另一种可用的接口. 模式结构 [类的适配器] Target 目标接口 Adaptee 现有的类 Adapter 中间转换的类,即实现了目标接口,又继承了现有的类. 1 package com.xingoo.test1; 2 interface Target{ 3 public void operation1(); 4 public void