Adapter(适配器)-类对象结构型模式
1.意图
将一个类接口转换成客户希望的另外一个接口。Adapter模式使那些原本不能一起工作的类,可以一起工作。
2.别名
包装器 Wrapper.
3.动机
一个应用可能会有一些类具有不同的接口,并且这些接口互不兼容,可以专门定义一个类,用来适配互不兼容的类。
4.适用性
- 你想使用一个已经存在的类,而它的接口不符合你的需求。
- 你想创建一个可以复用的类,该类可以与其他不相关的类或不可预见的类协同工作。
- 你想使用一些已经存在的子类,但是不可能对每一个都进行子类化以匹配它们的接口。对象适配器可以适配它的父类接口。
5.结构

6.代码实例
1.对象适配器
class Adaptee
{
public:
void SpecificRequest();
};
class Target
{
public:
virtual void Request()=;
virtual void Initilaize()=;
};
#include "Target.h"
#include <memory>
class Adaptee; class Adapter : public Target
{
public:
void Request();
void Initilaize();
std::shared_ptr<Adaptee> m_pAdaptee;
};
#include <iostream>
#include "Adaptee.h" void Adaptee::SpecificRequest()
{
std::cout << "SpecificRequest" << std::endl;
}
#include "Adaptee.h"
#include "Adapter.h" void Adapter::Request()
{
m_pAdaptee->SpecificRequest();
} void Adapter::Initilaize()
{
m_pAdaptee = std::shared_ptr<Adaptee>(new Adaptee);
}
#include "Adapter.h" int main()
{
std::shared_ptr<Adapter> pAdapter(new Adapter);
std::shared_ptr<Target> pTarget = std::dynamic_pointer_cast<Target>(pAdapter);
pTarget->Initilaize();
pTarget->Request(); while();
}
测试结果:

2.类适配器
#include "Target.h"
#include "Adaptee.h" class AdapterClass : public Target,private Adaptee
{
public :
void Request();
void Initilaize();
};
以上代码为类适配器,公有继承Target,私有继承Adaptee,即只继承Adaptee的实现,不继承其接口。
#include "AdapterClass.h" void AdapterClass:: Request()
{
SpecificRequest();
}
void AdapterClass::Initilaize()
{
}
以上为类适配器的实现,在Request中调用Adaptee的SpecifiRequest。
#include "Adapter.h" int main()
{
std::shared_ptr<Adapter> pAdapter(new Adapter);
//std::shared_ptr<Target> pTarget = std::dynamic_pointer_cast<Target>(pAdapter);
//pTarget->Initilaize();
pAdapter->Request(); while();
}
测试代码,直接调用Adapter的Request从而能够达到目的。
7.效果
类适配器:
- 用一个具体的Adapter类对Adaptee和Target进行匹配。结果是当我们想要匹配一个类以及所有它的子类时,类Adapter将不能工作。
- 使得Adapter可以重定义Adaptee的部分行为,因为Adapter是Adaptee的一个子类。
- 仅仅引入了一个对象,并不需要额外的指针以间接得到Adaptee.
对象适配器:
- 允许一个Adapter同时与多个Adaptee同时工作。
- 使得重定义Adaptee的行为比较困难。
Adapter(适配器)-类对象结构型模式的更多相关文章
- 组合模式/composite模式/对象结构型模式
组合模式/composite模式/对象结构型 意图 将对象组合成树形结构以表示"整体--部分"的层次结构.Composite使得用户对单个对象和组合对象的使用具有一致性. 动机 C ...
- Facade(外观)-对象结构型模式
1.意图 为子系统中的一组接口提供一个一致的接口,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用. 2.动机 将一个系统划分成若干子系统有利于降低系统的复杂性.一个常见的设计目 ...
- Bridge模式——对象结构型模式
今天看了Bridge模式,对其进行简单的总结,并给出几篇通俗易懂的文章链接. (一)意图--将抽象部分和它的实现部分分离,使它们都可以独立地变化. 适用于从多维度描述的类型,拆解开来,使其能沿着各维度 ...
- Decorator(装饰)-对象结构型模式
1.意图 动态地给一个对象添加一些额外的职责.就增加功能来说,Decorator模式相比生成子类更为灵活. 2.别名 包装器 Wrapper. 3.动机 给某个对象而不是整个类添加一些功能.一个较为灵 ...
- Bridge(桥接)-对象结构型模式
1.意图 将抽象部分与它的实现部分分离,使它们都可以独立地变化. 2.动机 在抽象类与它的实现之间起到桥梁作用,使它们可以独立地变化. 3.适用性 不希望在抽象和它的实现部分之间有一个固定的绑定关系. ...
- Composite(组合)--对象结构型模式
1.意图 将对象组合成树形结构以表示“部分-整体”的层次结构.Composite使得用户对单个对象和组合对象的使用具有一致性. 2.动机 可以组合多个简单组件以形成一些较大的组件,这些组件又可以组合成 ...
- Proxy(代理)-对象结构型模式
1.意图 为其它对象提供一种代理以控制对这个对象的访问. 2.别名 Surrogate. 3.动机 通过Proxy可以达到对一个对象的访问控制. 4.适用性 远程代理 为一个对象在不同地址空间提供局 ...
- Flyweight(享元)--对象结构型模式
1.意图 运用共享技术有效地支持大量细粒度的对象. 2.动机 Flyweight模式描述了如何共享对象,使得可以细粒度地使用它们,而无需高昂的代价.flyweight是一个共享对象,它可以同时在多个场 ...
- .NET设计模式(15):结构型模式专题总结(转)
摘要:结构型模式,顾名思义讨论的是类和对象的结构,它采用继承机制来组合接口或实现(类结构型模式),或者通过组合一些对象,从而实现新的功能(对象结构型模式).这些结构型模式,它们在某些方面具有很大的相似 ...
随机推荐
- windows端加密程序,lua代码,ZeroBrane调试
发一个自己改的zerobrane版本(启动中文,快捷键改成和一样:F5启动调试,F9断点,F10逐过程,F11逐语句,F12跳出函数) 在zerobrane 1.0(2015.3.13)发布的基础上改 ...
- MQTT服务器搭建-mosquitto1.4.4安装指南
Mosquitto mosquitto是一款实现了 MQTT v3.1 协议的开源的消息代理服务软件. 其提供了非常轻量级的消息数据传输协议,采用发布/订阅模式进行工作,可用于物联设备.中间件.APP ...
- apache配置域名指向
<VirtualHost *:80>ServerAdmin webmaster@example.com ——管理员邮箱(可以随便写一个)DocumentRoot "/home/p ...
- WCF: 没有终结点在侦听可以接受消息的 这通常是由于不正确的地址或者 SOAP 操作导致的。
问题: 由于我这里的wcf服务是采用“BasicHttpBinding”的方式,即安全绑定模式,客户端在引用这个服务后所生成的终结点配置(endpoint )就变成了<endpoint ...
- 【mysql】压缩myisam数据表
myisam引擎介绍 存储结构: MyISAM每张表被存放在三个文件: frm:表格定义: MYD(MYData):数据文件: MYI(MYIndex):索引文件: 存储空间: MyISAM可被压 ...
- 解决Linux性能问题的前60秒
为了解决性能问题,你登入了一台Linux服务器,在最开始的一分钟内需要查看什么? 在Netflix我们有一个庞大的EC2 Linux集群,还有非常多的性能分析工具来监控和调查它的性能.其中包括用于云监 ...
- Java 二进制与十六进制转换
Java 二进制与十六进制转换 二进制转换十六进制 /** * @description 将二进制转换成16进制 * * @param buf * @return */ public static S ...
- 使用它tshark分析pcap的例子以及scapy下载地址
转一篇cisco工作人员使用tshark分析pcap的文章,以及scapy的下载地址 http://blogs.cisco.com/security/finding-a-needle-in-a-pca ...
- python 简单爬虫diy
简单爬虫直接diy, 复杂的用scrapy import urllib2 import re from bs4 import BeautifulSoap req = urllib2.Request(u ...
- python序列化: json & pickle & shelve 模块
一.json & pickle & shelve 模块 json,用于字符串 和 python数据类型间进行转换pickle,用于python特有的类型 和 python的数据类型间进 ...