常见设计模式解析和实现(C++)Adapt模式

简介: 作用:将一个类的接口转换成客户希望的另一个接口。Adapt模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。     UML示意图 1)      采用继承原有接口类的方式   2)采用组合原有接口类的方式   解析: Adapt模式其实就是把完成同样一个功能但是接口不能兼容的类桥接在一起使之可以在一起工作,这个模式使得复用旧的接口成为可能。

作用:将一个类的接口转换成客户希望的另一个接口。Adapt模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

 

 

UML示意图

1)      采用继承原有接口类的方式


 

2)采用组合原有接口类的方式


 

解析:

Adapt模式其实就是把完成同样一个功能但是接口不能兼容的类桥接在一起使之可以在一起工作,这个模式使得复用旧的接口成为可能。

实现:

Adapt模式有两种实现的方法,一种是采用继承原有接口的方法,一种是采用组合原有接口类的方法,这里采用的是第二种实现方法

1)  Adapt.h

 

[cpp]  view plain copy
  1. class Target  
  2. {  
  3. public:  
  4.     Target(){}  
  5.     virtual ~Target(){}  
  6.   
  7.     virtual void Request() = 0;  
  8. };  
  9.   
  10.   
  11. // 与被Adapt对象提供不兼容接口的类  
  12. class Adaptee  
  13. {  
  14. public:  
  15.     Adaptee(){}  
  16.     ~Adaptee(){}  
  17.     void SpecialRequest();  
  18. };  
  19.   
  20.   
  21. // 进行Adapt的类,采用聚合原有接口类的方式  
  22. class Adapter : public Target  
  23. {  
  24. public:  
  25.     Adapter(Adapter* pAdaptee);  
  26.     virtual ~Adapter();  
  27.   
  28.     virtual void Request();  
  29. private:  
  30.     Adaptee* m_pAdatee;  
  31. };  

(2)Adapt.cpp

[cpp]  view plain copy
  1. #include "Adapt.h"  
  2. #include <iostream>  
  3.   
  4. void Adaptee::SpecialRequest()  
  5. {  
  6.     std::cout << "SpecialRequest of Adaptee\n";  
  7. }  
  8.   
  9.   
  10. void Adapter::Adapter(Adaptee *pAdaptee) : m_pAdaptee(pAdaptee)  
  11. {  
  12. }  
  13.   
  14. Adapter::~Adapter()  
  15. {  
  16.     delete m_pAdaptee;  
  17.     m_pAdaptee = NULL;  
  18. }  
  19.   
  20. void Adapter::Request()  
  21. {  
  22.     std::cout << "Request of Adapter\n";  
  23.     m_pAdapter->SpecialRequest();  
  24. }  


 (3)main.cpp

[cpp]  view plain copy
  1. #include "Adapter.h"  
  2. #include "stdlib.h"  
  3.   
  4. int main()  
  5. {  
  6.     Adaptee *pAdaptee = new Adaptee;  
  7.     Target  *pTarget  = new Adapter(pAdaptee);  
  8.     pTarget->Request();  
  9.   
  10.     delete pTarget;  
  11.     system("pause");  
  12. }  
目录
相关文章
|
2月前
|
设计模式 Java 数据库连接
【设计模式】【创建型模式】工厂方法模式(Factory Methods)
一、入门 什么是工厂方法模式? 工厂方法模式(Factory Method Pattern)是一种创建型设计模式,它定义了一个用于创建对象的接口,但由子类决定实例化哪个类。工厂方法模式使类的实例化延迟
87 16
|
2月前
|
设计模式 负载均衡 监控
并发设计模式实战系列(2):领导者/追随者模式
🌟 ​大家好,我是摘星!​ 🌟今天为大家带来的是并发设计模式实战系列,第二章领导者/追随者(Leader/Followers)模式,废话不多说直接开始~
66 0
|
2月前
|
设计模式 监控 Java
并发设计模式实战系列(1):半同步/半异步模式
🌟 ​大家好,我是摘星!​ 🌟今天为大家带来的是并发设计模式实战系列,第一章半同步/半异步(Half-Sync/Half-Async)模式,废话不多说直接开始~
52 0
|
2月前
|
设计模式 安全 Java
并发设计模式实战系列(12):不变模式(Immutable Object)
🌟 大家好,我是摘星!🌟今天为大家带来的是并发设计模式实战系列,第十二章,废话不多说直接开始~
50 0
|
2月前
|
设计模式 算法 Java
设计模式觉醒系列(04)策略模式|简单工厂模式的升级版
本文介绍了简单工厂模式与策略模式的概念及其融合实践。简单工厂模式用于对象创建,通过隐藏实现细节简化代码;策略模式关注行为封装与切换,支持动态替换算法,增强灵活性。两者结合形成“策略工厂”,既简化对象创建又保持低耦合。文章通过支付案例演示了模式的应用,并强调实际开发中应根据需求选择合适的设计模式,避免生搬硬套。最后推荐了JVM调优、并发编程等技术专题,助力开发者提升技能。
|
5月前
|
编译器 C++ 开发者
【C++篇】深度解析类与对象(下)
在上一篇博客中,我们学习了C++的基础类与对象概念,包括类的定义、对象的使用和构造函数的作用。在这一篇,我们将深入探讨C++类的一些重要特性,如构造函数的高级用法、类型转换、static成员、友元、内部类、匿名对象,以及对象拷贝优化等。这些内容可以帮助你更好地理解和应用面向对象编程的核心理念,提升代码的健壮性、灵活性和可维护性。
|
2月前
|
设计模式 Prometheus 监控
并发设计模式实战系列(20):扇出/扇入模式(Fan-Out/Fan-In)(完结篇)
🌟 大家好,我是摘星!🌟今天为大家带来的是并发设计模式实战系列,第二十章,废话不多说直接开始~
72 0
|
4月前
|
设计模式 Java 关系型数据库
设计模式:工厂方法模式(Factory Method)
工厂方法模式是一种创建型设计模式,通过将对象的创建延迟到子类实现解耦。其核心是抽象工厂声明工厂方法返回抽象产品,具体工厂重写该方法返回具体产品实例。适用于动态扩展产品类型、复杂创建逻辑和框架设计等场景,如日志记录器、数据库连接池等。优点包括符合开闭原则、解耦客户端与具体产品;缺点是可能增加类数量和复杂度。典型应用如Java集合框架、Spring BeanFactory等。
|
4月前
|
设计模式 SQL Java
【再谈设计模式】解释器模式~语法的解析执行者
解释器模式定义了一种语言的语法表示,并定义一个解释器来解释该语言中的句子。它使用类来表示每个语法规则,并且通过递归调用这些类的方法来解释表达式。本质上,它将一个复杂的表达式分解为一系列简单的部分,然后按照特定的语法规则进行解析和执行。
90 8
|
5月前
|
数据采集 Web App开发 存储
深度解析:使用 Headless 模式 ChromeDriver 进行无界面浏览器操作
本文介绍了基于无界面浏览器(如ChromeDriver)和代理IP技术的现代爬虫解决方案,以应对传统爬虫面临的反爬机制和动态加载内容等问题。通过Selenium驱动ChromeDriver,并结合亿牛云爬虫代理、自定义Cookie和User-Agent设置,实现高效的数据采集。代码示例展示了如何配置ChromeDriver、处理代理认证、添加Cookie及捕获异常,确保爬虫稳定运行。性能对比显示,Headless模式下的ChromeDriver在数据采集成功率、响应时间和反爬规避能力上显著优于传统爬虫。该方案广泛应用于电商、金融和新闻媒体等行业。
335 0
深度解析:使用 Headless 模式 ChromeDriver 进行无界面浏览器操作

热门文章

最新文章

推荐镜像

更多
  • DNS