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

1) 意图:

将一个类的接口转换成客户希望的另一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作

2) 结构:

适配器两种结构,一种继承实现,一种组合实现

  a. 继承方式:

  

b. 组合方式:

   其中:

    1. Target定义Client使用的与特定领域相关的接口
    2. Client与符合Target接口的对象协同
    3. Adaptee定义一个已经存在的接口,这个接口需要适配
    4. Adapter对Adaptee的接口与Target接口进行适配

3) 适用性:

  1. 想使用一个类,但是它的接口不符合要求
  2. 想创建一个可以用的类,该类可以和其他不相关的类或不可预见的类协同工作
  3. 想使用一个已经存在的子类,但是不可能对每一个都进行子类化以匹配它们的接口

4) 举例:

  a. 继承方式:

  

 1  #include <iostream>
 2 class  Target
 3 {
 4 public:
 5     Target() {}
 6     virtual ~Target() {}
 7     virtual std::string Request() = 0;
 8 };
 9
10 class  Adaptee
11 {
12 public:
13     Adaptee() {}
14     virtual ~Adaptee() {}
15     void  SpecificRequest(std::string& str)
16     {
17         str = "Hello World";
18     }
19 };
20
21 class  Adapter : public Target, public  Adaptee
22 {
23 public:
24     Adapter() {}
25     virtual ~Adapter() {}
26     std::string Request()
27     {
28         std::string str;
29         SpecificRequest(str);
30         return str;
31     }
32 };
33
34  int main()
35  {
36      Target* target = new Adapter();
37      std::string str = target->Request();
38      std::cout << str.c_str() << std::endl;
39      system("pause");
40  }

  b. 组合方式:

 1 #include <iostream>
 2 class  Target
 3 {
 4 public:
 5     Target() {}
 6     virtual ~Target() {}
 7     virtual std::string Request() = 0;
 8 };
 9
10 class  Adaptee
11 {
12 public:
13     Adaptee() {}
14     virtual ~Adaptee() {}
15     void  SpecificRequest(std::string& str)
16     {
17         str = "Hello World";
18     }
19 };
20
21 class  Adapter : public Target
22 {
23 public:
24     Adapter():m_adaptee(NULL){}
25     virtual ~Adapter()
26     {
27         if (m_adaptee) delete m_adaptee;
28     }
29     std::string Request()
30     {
31         std::string str;
32         m_adaptee = new Adaptee();
33         m_adaptee->SpecificRequest(str);
34         return str;
35     }
36 private:
37     Adaptee* m_adaptee;
38 };
39
40  int main()
41  {
42      Target* target = new Adapter();
43      std::string str = target->Request();
44      std::cout << str.c_str() << std::endl;
45      system("pause");
46  }

原文地址:https://www.cnblogs.com/ho966/p/12231094.html

时间: 2024-10-08 21:55:31

c++ 结构型模式-适配器(Adapter)的相关文章

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

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

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

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

结构型模式之适配器

结构型模式主要讲述如何组合类和对象以获取更大功能的结构,同样,按照模式的主要用途,结构型模式也分为两个层次: 1.结构型类模式,采用继承机制来组合接口,java没有多继承功能,但是可以实现(implements)多个接口,实现了多个父接口的类便拥有了父接口的功能,GOF给出的结构型类模式只有一个,那就是Adapter(适配器)模式,适配器模式的实现还可以用对象模式,一会儿会给出例子. 2.结构型对象模式,该类型的模式不是对接口进行组合,而是描述如何对一些对象进行组合,从而实现一些新功能.因为它可

NET设计模式 第三部分 结构型模式(7):适配器模式(Adapter Pattern)

适配器模式(Adapter Pattern) ——.NET设计模式系列之八 Terrylee,2006年2月 概述 在软件系统中,由于应用环境的变化,常常需要将“一些现存的对象”放在新的环境中应用,但是新环境要求的接口是这些现存对象所不满足的.那么如何应对这种“迁移的变化”?如何既能利用现有对象的良好实现,同时又能满足新的应用环境所要求的接口?这就是本文要说的Adapter 模式. 意图 将一个类的接口转换成客户希望的另外一个接口.Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可

设计模式之“结构型模式”(一)

结构型模式主要分为七大模式,分别为:适配器模式.桥接模式.组合模式.装饰模式:.外观模式.享元模式.代理模式. 适配器模式 将一个类的接口转换成客户希望的另外一个接口.Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作. 一.适用时期 1.适用一个已经存在的类,但如果它的接口,也就是它的方法和你的要求不相同时,就应该考虑适用适配器. 2.两个类所做的事情相同或相似,但是具有不同的接口时要使用它. 3.在双方都不太容易修改的时候再使用适配器模式适配. 二.DataAdapt

设计模式4 结构型模式

设计模式4  结构型模式 目录 代理模式 装饰器 外观模式 适配器模式 代理模式,美国,韩国代理购物 [email protected]:~$ cat main.cpp  #include<iostream> using namespace std; class Item //商品 { public: Item(string kind ,bool fact) { this->kind = kind; this->fact = fact; } string getKind() { r

ANDROID 中设计模式的采用--结构型模式

结构型模式中的适配器模式.外观模式.装饰模式.代理模式都属于包装模式,都是对另外的类或对象的包装,只是各自的意图不同. 适配器模式通过对另外的类或对象的包装,将其接口转换为用户期望的接口,达到接口适配的目的. 外观模式是对包装的一组类或对象提供一个高层接口,意图是简化接口,使系统更加容易使用. 装饰模式的意图是在不改变包装对象接口的情况下为其增加另外的功能或职责. 代理模式的意图是通过对包装对象的包装以便控制对包装对象的访问. 适配器模式.外观模式对客户提供的接口与其包装类的接口有所不同,也就是

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

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

(转)Java经典设计模式(2):七大结构型模式(附实例和详解)

原文出处: 小宝鸽 总体来说设计模式分为三大类:创建型模式.结构型模式和行为型模式. 博主的上一篇文章已经提到过创建型模式,此外该文章还有设计模式概况和设计模式的六大原则.设计模式的六大原则是设计模式的核心思想,详情请看博主的另外一篇文章:Java经典设计模式之五大创建模式(附实例和详解). 接下来我们看看结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组合模式.享元模式.其中适配器模式主要分为三类:类的适配器模式.对象的适配器模式.接口的适配器模式.其中的对象的适配器