以下代码来源: 设计模式精解-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. 龙芯(mips64)电脑安装NodeJS

    背景 龙芯是国产的cpu,采用是mips架构,就类似大家熟知的x86.arm. 最近在一台龙芯电脑(系统是中兴新支点,Linux)上调试前端应用(electron),于是就需要安装NodeJS. 但是 ...

  2. Complete_NGINX_Cookbook

    Complete NGINX Cookbook 下载地址:Complete NGINX Cookbook

  3. JS PopupAlert

    JS PopupAlert 可以在 JavaScript 中创建三种消息框:警告框.确认框.提示框. 警告框 警告框经常用于确保用户可以得到某些信息. 当警告框出现后,用户需要点击确定按钮才能继续进行 ...

  4. LeetCode刷题191123

    博主渣渣一枚,刷刷leetcode给自己瞅瞅,大神们由更好方法还望不吝赐教.题目及解法来自于力扣(LeetCode),传送门. 算法: 给出一个区间的集合,请合并所有重叠的区间. 示例 1: 输入: ...

  5. MySQL Error Log 中IO写入瓶颈的警告分析

    周末在一台MySQL实例上频繁做大批量的写入测试,无意中发现MySQL的errorlog中频繁出现如下的Note:page_cleaner: 1000ms intended loop took *** ...

  6. jQuery - 拦截所有Ajax请求(统一处理超时、返回结果、错误状态码 )

    样例代码: <html> <head> <title>hangge.com</title> <meta charset="utf-8&q ...

  7. Sqlite—数据库管理与表管理

    数据库管理 创建数据库,创建完成之后自动进入 [root@localhost ~]# sqlite3 /www/wwwroot/task.db 使用数据库,如果 /www/wwwroot 路径下面没有 ...

  8. nginx配置文件 http 强跳转 https

    路径 /usr/local/nginx/conf/conf.d/test.jackcui.com.conf server { listen 80; server_name test.jackcui.c ...

  9. 华为eNSP路由交换实验-生成树之RSTP

    RSTP基础配置 实验拓扑图 实验步骤 1.基本配置 根据实验编址表进行相应的基本IP配置. 2.配置RSTP基本功能. (1)把生成树模式由默认的MSTP(华为交换机默认开启)改为RSTP. [FW ...

  10. Tensorflow常用算数操作

    TensorFlow 将图形定义转换成分布式执行的操作, 以充分利用可用的计算资源(如 CPU 或 GPU.一般你不需要显式指定使用 CPU 还是 GPU, TensorFlow 能自动检测.如果检测 ...