设计模式的C++实现之适配器模式

解决的问题:

适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本接口不匹配而无法在一 起工作的两个类能够在一起工作。比如说我的hp笔记本,美国产品,人家美国的电压是110V的,而我们中国的电压是220V, 要在中国能使用,必须找个变压器转一下电压才可以。这个变压器就是个适配器。

适配器模式有类适配器和对象适 配器两种模式,我们将分别讨论。

类适配器:

由图中可以看出,Adaptee类没有Request方法,而客户期待这 个方法。为了使客户能够使用Adaptee类,提供一个中间环节,即类Adapter类,Adapter类实现了Target接口,并继承自 Adaptee,Adapter类的Request方法重新封装了Adaptee的SpecificRequest方法,实现了适配的目的。

因为Adapter 与Adaptee是继承的关系,所以这决定了这个适配器模式是类的。

该适配器模式所涉及的角色包括:

目标 (Target)角色:这是客户所期待的接口。因为C#不支持多继承,所以Target必须是接口,不可以是类。

源(Adaptee) 角色:需要适配的类。

适配器(Adapter)角色:把源接口转换成目标接口。这一角色必须是类

简单实现:

#include<iostream>
using namespace std;  

// "ITarget"
class Target
{
public:
    // Methods
    virtual void Request(){};
};  

// "Adaptee"
class Adaptee
{
public:
    // Methods
    void SpecificRequest()
    {
        cout<<"Called SpecificRequest()"<<endl;
    }
};  

// "Adapter"
class Adapter : public Adaptee, public Target
{
public:
    // Implements ITarget interface
    void Request()
    {
        // Possibly do some data manipulation
        // and then call SpecificRequest
        this->SpecificRequest();
    }
};  

int main()
{
    // Create adapter and place a request
    Target *t = new Adapter();
    t->Request();  

    return 0;
}

对象适配器:

从图中可以看出:客户端需要调用Request方 法,而Adaptee没有该方法,为了使客户端能够使用Adaptee类,需要提供一个包装(Wrapper)类Adapter。这个包装类包装 了一个Adaptee的实例,从而将客户端与Adaptee衔接起来。由于Adapter与Adaptee是委派关系,这决定了这个适配器模式是 对象的。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索adapter
, 接口
, 方法
, 适配器
, 模式
, 角色
适配器设计模式
设计模式c 实现、c语言实现设计模式、适配器设计模式、java适配器设计模式、ios 适配器设计模式,以便于您获取更多的相关知识。

时间: 2024-09-12 22:48:50

设计模式的C++实现之适配器模式的相关文章

php设计模式 建造者模式 与Adapter(适配器模式)

php教程设计模式 建造者模式 与Adapter(适配器模式) 适配器模式 * * 将一个类的接口转换成客户希望的另外一个接口,使用原本不兼容的而不能在一起工作的那些类可以在一起工作 建造者模式 * * 将一个复杂对象的构建与它的表示分离,使用同样的构建过程可以创建不同的表示 <?php /** * 适配器模式 * * 将一个类的接口转换成客户希望的另外一个接口,使用原本不兼容的而不能在一起工作的那些类可以在一起工作 */ // 这个是原有的类型 class OldCache { public

设计模式之旅-第一天 适配器模式

什么是设计模式 在软件开发的世界里,许多领域中的问题具有相似的特性.就像造房子一样,不管要盖一座购物中心 ,还是要盖一座假日酒店,它们之间都有基本上相似的工作步骤,都需要搭建梁柱,铺置房顶等工作. 在做这些工作时都需要遵循某种特殊的技术要求,以使得房子的结构.承受能力达到合理,这些规则是 前人经过精确的计算和失败的教训得来的.对于软件开发也一样,如果我们希望编写出来健壮.灵活的 应用程序,也有必要进行精细的设计,并且可以通过遵循某种规则以达到这个目标.这些规则或者称之 为技巧就是设计模式. 设计

设计模式学习笔记(二)—-Adapter适配器模式

GOF<设计模式>一书对Adapter模式是这样描述的: 将一个类的接口转换成客户希望的另外一个接口.Adapter模式使原本由于接口不兼容而不能一起工作的类可以一起工作. 这段话大致是说:我们需要一种方式,为一个功能正确但接口不合的对象创建一个新接口.例如,客户给我们如下需求: 1)为都有"显示"(display)行为的点.线.正方形分别创建类. 2)客户对象不必知道自己到底拥有点.线.还是正方形.它只需知道拥有这些形状中的一个. 也就是说,我们要用一个更高层次的概念将这

.NET设计模式(8):适配器模式(Adapter Pattern)

概述 在软件系统中,由于应用环境的变化,常常需要将"一些现存的对象"放在新的环境中应用,但是新环境要求的接口是这些现存对象所不满足的.那么如何应对这种"迁移的变化"?如何既能利用现有对象的良好实现,同时又能满足新的应用环境所要求的接口?这就是本文要说的Adapter 模式. 意图 将一个类的接口转换成客户希望的另外一个接口.Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作. 结构图 图1 类的Adapter模式结构图 图2 对象的Adapt

设计模式(一)之适配器模式

被适配的类: public class Adaptee { public void specificMethod(){ System.out.println("三脚插头"); } } 适配接口 public interface AppleInterface { public void phoneInterface(); } 适配器 public class Adapter implements AppleInterface { private Adaptee adaptee; publ

.NET设计模式-适配器模式(Adapter Pattern)

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

设计模式学习笔记系列

设计模式学习笔记(二十二)-FlyWeight享元模式 设计模式学习笔记(二十一)-Composite模式 设计模式学习笔记(二十)-Visitor访问者模式 设计模式学习笔记(十九)-Chain of Responsibility职责链模式 设计模式学习笔记(十八)-Mediator中介者模式 设计模式学习笔记(十七)-Memento备忘录模式 设计模式学习笔记(十六)-Proxy模式 设计模式学习笔记(十五)-State模式 设计模式学习笔记(十四)-Command模式 设计模式学习笔记(十

.NET(C#) Internals: .NET Framework中已使用的设计模式

--适合有一定设计模式基础和.NET基础的人阅读. 写在前面 "设计模式"我一向是敬而远之的态度,不会去写这方面的文章,原因有二:第一,要想写好设计模式的文章太难,需要笔者丰富的经验:第二,没有深厚的 功底写出的设计模式文章容易误导他人.自认没有深厚的功底,但我不会为了设计模式而设计模式.我想大部分人对设计模式的理解是不够深刻的,不然应用自如, 特别是初学者!所有研究高质量的源码或框架是我们学习实践设计模式的好途径之一. 而我之所以写这篇文章,主要是因为它从.NET Framework

讲解JavaScript的Backbone.js框架的MVC结构设计理念_基础知识

什么是Backbone.js?Backbone.js是十大JS框架之首,Backbone.js 是一个重量级js  MVC 应用框架,也是js MVC框架的鼻祖.它通过Models数据模型进行键值绑定及custom事件处理,通过模型集合器Collections提供一套丰富的API用于枚举功能,通过视图Views来进行事件处理及与现有的Application通过JSON接口进行交互. 简而言之,Backbone是实现了web前端MVC模式的js库 什么是MVC?MVC:后端服务器首先(过程1)通过