7 结构型模式-----适配器模式

模式动机:有时软件复用的一个难题就是接口的不兼容性,适配器的职责就是为客户提供兼容的适配者接口,使得客户只需访问一类接口就可以调用合适的适配者,而其中的适配细节则有适配器来完成。

模式定义(Adapter Pattern)将一个接口转换为用户期望的接口,使得那些接口不兼容的类可以一起工作。

模式结构图:

模式代码:

bt_适配器模式.h

 1 #ifndef AP_H
 2 #define AP_H
 3 #include <iostream>
 4
 5 using namespace std;
 6
 7 /*
 8     定义抽象目标类
 9 */
10 class Target
11 {
12 public:
13     virtual ~Target(){ }
14     virtual void request() = 0;
15 };
16
17 /*
18     适配者类
19 */
20 class Adaptee
21 {
22 public:
23     void specificRequest()
24     {
25         cout << "成功调用适配者方法" << endl;
26     }
27 };
28
29 /*
30     适配器类
31 */
32 class Adapter : public Target
33 {
34 public:
35     virtual void request()
36     {
37         pa->specificRequest();
38     }
39
40 private:
41     Adaptee* pa;    // 指向合适的适配者
42 };
43
44 #endif // AP_H

测试用例.cpp

 1 #include "bt_适配器模式.h"
 2
 3 int main()
 4 {
 5     cout << "***** 适配器模式测试 *****" << endl;
 6     Target* target = new Adapter;   // 实例化一个与目标关联的适配器
 7     target->request();                // 客户端调用
 8
 9     delete target;
10
11     return 0;
12 }

模式分析:该模式将目标类和具体适配者类解耦,增加了系统的灵活性和可扩展性,更换适配器时比较方便,不需要修改已有类,符合“开闭原则”。但是若需要更换一个已有的Adaptee方法比较麻烦,需要借助Adaptee的子类才能完成。同时如果想让一个Adapter与多个Adaptee(Adaptee及其子类)同时工作,也必须生成Adaptee的子类,并且需要在Adapter类中调用Adaptee子类的方法。

时间: 2024-11-06 15:37:43

7 结构型模式-----适配器模式的相关文章

结构型模式—适配器模式

定义: 将一个类(Adaptee)的接口转换成客户(Client)希望的另外一个接口(Target). 目标接口(Target):客户所期待的接口.目标可以是具体的或抽象的类,也可以是接口. 需要适配的类(Adaptee):需要适配的类或适配者类. 适配器(Adapter):使得一个东西适合另一个东西的东西.百度中定义为:接口转换器.通过包装一个需要适配的对象,把源接口转换成目标接口. 为什么要适配:需要的东西已做好,但是不能用,短时间又不能改造,想办法适配它. 作用: 使得原本由于接口不兼容而

第8章 结构型模式—适配器模式

1. 适配器模式(Adpater pattern)的定义 (1)将一个类的接口转换成客户希望的另外一个接口.适配器模式使得原来由于接口不兼容而不能一起工作的那些可以一起工作. (2)适配器模式的结构和说明 ①Client客户端,调用自己需要的领域接口Target ②Target:定义客户端需要的跟特定领域相关的接口 ③Adaptee:己经存在的接口,通常能满足客户端的功能要求,但接口与客户端要求的特定领域接口不一致,需要被适配. ④Adapter:适配器,把Adaptee适配成Client需要的

结构型模式--适配器模式(Adapter)

适配器模式将某个类的接口转换成客户端期望的另一个接口表示,目的是消除由于接口不匹配所造成的类的兼容性问题.主要分为三类:类的适配器模式.对象的适配器模式.接口的适配器模式.首先,我们来看看类的适配器模式,先看类图: 核心思想就是:有一个Source类,拥有一个方法,待适配,目标接口时Targetable,通过Adapter类,将Source的功能扩展到Targetable里,看代码: public class Source { public void method1() { System.out

看透设计模式-结构型模式

这里我们主要讨论 结构型模式 适配器模式,: ● Target(目标抽象类):目标抽象类定义客户所需接口,可以是一个抽象类或接口,也可以是具体类. ● Adapter(适配器类):适配器可以调用另一个接口,作为一个转换器,对Adaptee和Target进行适配,适配器类是适配器模式的核心,在对象适配器中,它通过继承Target并关联一个Adaptee对象使二者产生联系. ● Adaptee(适配者类):适配者即被适配的角色,它定义了一个已经存在的接口,这个接口需要适配,适配者类一般是一个具体类,

设计模式06: Adapter 适配器模式(结构型模式)

Adapter 适配器模式(结构型模式) 适配(转换)的概念无处不在:电源转接头.电源适配器.水管转接头... 动机(Motivation)在软件系统中,由于应用环境的变化,常常需要将“一些现存的对象”放在新的环境中应用,但是新环境要求的接口是这些现存对象不能满足的.如何应对这种“迁移的变化”?如何既能够利用现有对象的良好表现,同时又能满足新的应用环境所要求的接口? 意图(Intent)将一个类的接口转换成客户希望的另一个接口.Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一

一起学java设计模式--适配器模式(结构型模式)

适配器模式 现有一个接口DataOperation定义了排序方法sort(int[]) 和查找方法search(int[], int),已知类QuickSort的quickSort(int[])方法实现了快速排序算法,类BinarySearch 的binarySearch(int[], int)方法实现了二分查找算法.现使用适配器模式设计一个系统,在不修改源代码的情况下将类QuickSort和类BinarySearch的方法适配到DataOperation接口中.绘制类图并编程实现. (要求实现

设计模式(七) : 结构型模式--适配器模式

适配器模式主要是为了解决接口不符合系统需要的问题.分成类的适配器和对象的适配器. 1. 类的适配器: 示意性代码: package com.javadesignpattern.Adapter; public interface Target { public void sampleOperation1(); public void sampleOperation2(); } package com.javadesignpattern.Adapter; public class Adaptee {

Java经典23种设计模式之结构型模式(三)------附代理模式、适配器模式、外观模式区别

本文介绍7种结构型模式里的剩下两种:享元模式.代理模式. 一.享元模式FlyWeight 享元模式比较简单且重要,在很多场合都被用到,只不过封装起来了用户看不到.其概念:运用共享内存技术最大限度的支持大量细粒度的对象.这个概念给的有些抽象,说白了就是如果内存中存在某个对象A,如果再次需要使用对象A的时候如果内存中有A这个对象就直接使用它,不要再次new了.如果没有,则重新new一个.基于这个特点,享元模式使用时一般会给待访问对象传递一个Tag,用来标识这个对象,而且要同时使用抽象工厂的方法进行访

设计模式(七):Adapter 适配器模式 -- 结构型模式

1. 概述: 接口的改变,是一个需要程序员们必须(虽然很不情愿)接受和处理的普遍问题.程序提供者们修改他们的代码;系统库被修正;各种程序语言以及相关库的发展和进化.  例子1:iphone4,你即可以使用UBS接口连接电脑来充电,假如只有iphone没有电脑,怎么办呢?苹果提供了iphone电源适配器.可以使用这个电源适配器充电.这个iphone的电源适配器就是类似我们说的适配器模式.(电源适配器就是把电源变成需要的电压,也就是适配器的作用是使得一个东西适合另外一个东西.)  例子2:最典型的例