以下代码来源: 设计模式精解-GoF 23种设计模式解析附C++实现源码

//****************************类模式的Adaptr********************************

//Adapter.h

#pragma once
class Target
{
public:
Target();
virtual ~Target();
virtual void Request();
protected:
private:
}; class Adaptee
{
public:
Adaptee();
virtual ~Adaptee();
void SpecificRequest();
protected:
private:
}; class Adapter :public Target, private Adaptee
{
public:
Adapter();
~Adapter();
void Request();
protected:
private:
};

//Adapter.cpp

#include"Adapter.h"
#include<iostream> Target::Target(){}
Target::~Target(){}
void Target::Request()
{
std::cout << "Target Request!!" << std::endl;
} Adapter::Adapter(){}
Adapter::~Adapter(){}
void Adapter::Request()
{
this->SpecificRequest();
} Adaptee::Adaptee(){}
Adaptee::~Adaptee(){}
void Adaptee::SpecificRequest()
{
std::cout << "Specific Request!!" << std::endl;
}

//main.cpp

#include"Adapter.h"
#include<iostream>
#include<string>
int main(int args, char* argv)
{
Target* adt = new Adapter();
adt->Request();
getchar();
return ;
}

//****************************对象模式的Adaptr********************************

//Adapter.h

#pragma once

class Target
{
public:
Target();
virtual ~Target();
virtual void Request();
protected:
private:
}; class Adaptee
{
public:
Adaptee();
virtual ~Adaptee();
void SpecificRequest();
protected:
private:
}; class Adapter :public Target
{
public:
Adapter(Adaptee* adt);
virtual ~Adapter();
virtual void Request();
protected:
private:
Adaptee* _ade;
};

//Adapter.cpp

#include"Adapter.h"
#include<iostream> Target::Target(){}
Target::~Target(){}
void Target::Request()
{
std::cout << "Target Request!!" << std::endl;
} Adaptee::Adaptee(){}
Adaptee::~Adaptee(){}
void Adaptee::SpecificRequest()
{
std::cout << "Specific Request!!" << std::endl;
} Adapter::Adapter(Adaptee* ade)
{
this->_ade = ade;
}
Adapter::~Adapter(){}
void Adapter::Request()
{
_ade->SpecificRequest();
}

//main.cpp

#include"Adapter.h"
#include<iostream>
#include<string> int main(int args, char* argv)
{
Adaptee* ade = new Adaptee;
Target* adt = new Adapter(ade);
adt->Request();
getchar();
return ;
}

设计模式-Adapter(结构型模式)针对第三方库 函数 接口不匹配的问题,分为类模式 与 对象模式 两种的更多相关文章

  1. 【设计模式】结构型03外观模式(Facade Pattern)

    [设计模式]结构型02装饰模式(Decorator Pattern) 意图:为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用. 主要解决:降低访问 ...

  2. 【设计模式】结构型01代理模式(Proxy Pattern)

    代理模式(Proxy Pattern) 定义:顾名思义,增加中间层,为其他对象提供一种代理以控制对这个对象的访问.核心在于代理二字. 1.和适配器模式的区别:适配器模式主要改变所考虑对象的接口,而代理 ...

  3. 第三方库API接口

    第三方库API接口 InfluxDB提供了各种语言的Http API接口的封装.具体可以看这里: https://docs.influxdata.com/influxdb/v0.10/clients/ ...

  4. GoF的23种设计模式之结构型模式的特点和分类

    结构型模式描述如何将类或对象按某种布局组成更大的结构.它分为类结构型模式和对象结构型模式,前者采用继承机制来组织接口和类,后者釆用组合或聚合来组合对象. 由于组合关系或聚合关系比继承关系耦合度低,满足 ...

  5. Go语言实现的23种设计模式之结构型模式

    摘要:本文主要聚焦在结构型模式(Structural Pattern)上,其主要思想是将多个对象组装成较大的结构,并同时保持结构的灵活和高效,从程序的结构上解决模块之间的耦合问题. 本文分享自华为云社 ...

  6. Java设计模式之结构型模式

    结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组合模式.享元模式. 一.适配器模式: 意图: 将一个类的接口转换成客户希望的另外一个接口.Adapter 模式使得原本由于接 ...

  7. Java经典23种设计模式之结构型模式(一)

    结构型模式包含7种:适配器模式.桥接模式.组合模式.装饰模式.外观模式.享元模式.代理模式. 本文主要介绍适配器模式和桥接模式. 一.适配器模式(Adapter) 适配器模式事实上非常easy.就像手 ...

  8. 适配器模式 adapter 结构型 设计模式(九)

    现实世界中的适配器模型   先来看下来几个图片,截图自淘宝 上图为港版的插头与港版的插座   上图为插座适配器卖家的描述图   上图为适配后的结果 现实世界中适配器模式 角色分类 这就是适配器模式在电 ...

  9. 【设计模式】结构型04桥接模式(Bridge Pattern)

    学习地址:http://www.runoob.com/design-pattern/bridge-pattern.html 桥接模式(Bridge Pattern) 桥接模式(Bridge patte ...

随机推荐

  1. OSG绘制空间凹多边形并计算其面积

    目录 1. 思路 1) 多边形分格化 2) 几何图元遍历 2. 实现 3. 参考 1. 思路 这个问题其实涉及到OSG中的两个问题:多边形分格化和几何图元遍历. 1) 多边形分格化 在OpenGL/O ...

  2. 46.QT-自带库QSerialPort串口使用

    之前一章学习的是第三方库使用: 34.QT-qextserialport第三方库制作串口助手(并动态检测在线串口,附带源码) 本章来学习自带serial库 1.QSerialPortInfo QLis ...

  3. 图片切换器(ImageSwitcher)的功能与用法

    ImageSwitcher继承了ViewSwitcher,因此它具有与ViewSwitcher相同的特征:可以在切换View组件时使用动画效果.ImageSwitcher继承了ViewSwitcher ...

  4. 深入解析ReentrantReadWriteLock

    前言: 在Java的锁中很多锁都是同一时刻只允许一个线程访问,今天就来看看一个特殊的锁——读写锁.它的特殊之处就在于同一时刻可以运行多个读线程访问或者有一个写线程在访问.能够大大的提高并发性和吞吐量 ...

  5. C#&.Net干货分享- 构建Spire-Office相关Helper操作Word、Excel、PDF等

    先下载好如下的组件: 直接使用完整源码分享: namespace Frame.Office{    /// <summary>    /// Spire_WordHelper    /// ...

  6. bayaim_Centos7.6_mysql源码5.7-多my.cnf_20190424.txt

    用户名/密码mysql/mysql 一.安装mysql: 位置位于 /data/mysql 如果遇到依赖,无法删除,使用 rpm -e --nodeps <包的名字> 不检查依赖,直接删除 ...

  7. 关于spring boot上手的一点介绍

    在spring官网网址 https://spring.io/guides 下,有许多相关介绍,包括可以构建的例子程序. 使用intellij idea,可以通过新建 spring boot initi ...

  8. 工具推荐--刷LeetCode的神器

    本文首发于微信公众号:[坂本先生],文章地址为: https://mp.weixin.qq.com/s/vHv5hO8nils_g2VSKwu1Cg如有转载请标明出处 今天给大家安利一款快速刷Leet ...

  9. 关于jQuery MiniUI

    jQuery MiniUI v3.0 jQuery MiniUI - 专业WebUI控件库.它能缩短开发时间,减少代码量,使开发者更专注于业务和服务端,轻松实现界面开发,带来绝佳的用户体验. http ...

  10. make && make install的区别

    ./configure 配置环境make 是编译的意思.就是把源码包编译成二进制可执行文件make install 就是安装的意思. make && make install 的意思是 ...