设计模式-Adapter(结构型模式)针对第三方库 函数 接口不匹配的问题,分为类模式 与 对象模式 两种
以下代码来源: 设计模式精解-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(结构型模式)针对第三方库 函数 接口不匹配的问题,分为类模式 与 对象模式 两种的更多相关文章
- 【设计模式】结构型03外观模式(Facade Pattern)
[设计模式]结构型02装饰模式(Decorator Pattern) 意图:为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用. 主要解决:降低访问 ...
- 【设计模式】结构型01代理模式(Proxy Pattern)
代理模式(Proxy Pattern) 定义:顾名思义,增加中间层,为其他对象提供一种代理以控制对这个对象的访问.核心在于代理二字. 1.和适配器模式的区别:适配器模式主要改变所考虑对象的接口,而代理 ...
- 第三方库API接口
第三方库API接口 InfluxDB提供了各种语言的Http API接口的封装.具体可以看这里: https://docs.influxdata.com/influxdb/v0.10/clients/ ...
- GoF的23种设计模式之结构型模式的特点和分类
结构型模式描述如何将类或对象按某种布局组成更大的结构.它分为类结构型模式和对象结构型模式,前者采用继承机制来组织接口和类,后者釆用组合或聚合来组合对象. 由于组合关系或聚合关系比继承关系耦合度低,满足 ...
- Go语言实现的23种设计模式之结构型模式
摘要:本文主要聚焦在结构型模式(Structural Pattern)上,其主要思想是将多个对象组装成较大的结构,并同时保持结构的灵活和高效,从程序的结构上解决模块之间的耦合问题. 本文分享自华为云社 ...
- Java设计模式之结构型模式
结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组合模式.享元模式. 一.适配器模式: 意图: 将一个类的接口转换成客户希望的另外一个接口.Adapter 模式使得原本由于接 ...
- Java经典23种设计模式之结构型模式(一)
结构型模式包含7种:适配器模式.桥接模式.组合模式.装饰模式.外观模式.享元模式.代理模式. 本文主要介绍适配器模式和桥接模式. 一.适配器模式(Adapter) 适配器模式事实上非常easy.就像手 ...
- 适配器模式 adapter 结构型 设计模式(九)
现实世界中的适配器模型 先来看下来几个图片,截图自淘宝 上图为港版的插头与港版的插座 上图为插座适配器卖家的描述图 上图为适配后的结果 现实世界中适配器模式 角色分类 这就是适配器模式在电 ...
- 【设计模式】结构型04桥接模式(Bridge Pattern)
学习地址:http://www.runoob.com/design-pattern/bridge-pattern.html 桥接模式(Bridge Pattern) 桥接模式(Bridge patte ...
随机推荐
- 「SAP技术」如何看Z移动类型是复制哪个标准移动类型而创建的?
[SAP技术]SAP MM 如何看一个自定义移动类型是复制哪个标准移动类型而创建的? 比如项目上有一个自定义移动类型Z59,是复制551移动类型而定义的. OMJJ配置界面里,是有一个Ref字段.如下 ...
- 配置基于服务器认证的Dynamics 365 Customer Engagement和SharePoint Online集成
我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...
- Spring学习的第二天
第二天总共学习了以下内容: spring中的ioc常用注解: 案例使用xml方式和注解方式实现单表的CRUD操作(但还是需要xml配置文件,并不是纯注解的配置): 改造基于注解的Ioc案例,使用纯注解 ...
- robotframework框架 - 利用RequestsLibrary关键字轻松实现接口自动化!
robotframework(后续简称为robot)是一款自动化测试框架,可能做各种类型的自动化测试. 本文介绍通过robotframework来做接口测试. 第一步:安装第三方库,提供接口测试的关键 ...
- MySQL常用SQL语句总结
1.with rollup 可以实现在分组统计数据基础上再进行相同的统计 SELECT name, SUM(score) as score_count FROM score GROUP BY nam ...
- Spring Boot MVC api返回的String无法关联到视图页面
1:问题 使用 @Restcontroller 返回值定义为String 时 无法返回具体的页面 @RestController public class HelloController { @Get ...
- synchronized&volatile
synchronized(JVM实现的锁) 通过这两个关键字,我们可以很容易的实现同步多个任务的行为,可以实现同一时刻,只能有一条线程去访问共享资源 一: 修饰普通方法 多个线程,共同去竞争访问,方法 ...
- django.db.utils.OperationalError: (1093, "You can't specify target table 'xxx' for update in FROM clause")
这个错误的意思是,不能在update某张表的where条件中,再次select这张表的某些值作为筛选条件,比如: update message set content = "hello&qu ...
- Java题库——Chapter10 面向对象思考
1)You can declare two variables with the same name in ________. 1) _______ A)a method one as a forma ...
- Linux CentOS上安装 MySQL 8.0.16
前言: 因为我需要在我新安装的Linux CentOS系统服务器中安装和配置MySQL服务器,然而对于我们这种Linux使用小白而言在Linux系统中下载,解压,配置MySQL等一系列的操作还是有些耗 ...