• 适配器模式及C++实现


    适配器模式

    适配器模式是很好理解的模式了,生活中也非常常见,什么插头2口转3口,什么USB转PS2,这都算是适配器模式。说白了,就是如果有一些东西提供的接口你很像用,但是你手头没有好的接口使用它,这个就需要一个适配器,将你需要的接口转换成你所拥有的接口。这样的好处也是显而易见,就是你不用改变你现在所拥有的接口,保证你在任何地方的用法都不需要修改,然后底层的实现由适配器调用需要的接口来具体实现。

    image

    常见的场景

    使用第三方库的时候,第三方的库肯定不能适用所有的系统,所以需要一个适配器来转换。

    优点

    1.屏蔽了具体的实现方式,实现了依赖倒转。

    2.可以把不统一的接口封装起来,使之成为统一的接口。

    3.把本来不方便适用的接口转换成统一的接口。

    缺点

    C++实现

     1 #ifndef _ADAPTER_H_
     2 #define _ADAPTER_H_
     3 
     4 #include "Adaptee.h"
     5 
     6 
     7 class Target
     8 {
     9 public:
    10     Target();
    11     virtual ~Target();
    12 
    13     virtual void request() = 0;
    14 };
    15 
    16 
    17 class Adapter: public Target
    18 {
    19 public:
    20     Adapter();
    21     ~Adapter();
    22 
    23     void request();
    24 
    25 
    26 private:
    27     Adaptee* adaptee;
    28 };
    29 
    30 
    31 #endif
     1 #include "Adapter.h"
     2 
     3 
     4 Target::Target()
     5 {
     6 
     7 }
     8 
     9 
    10 Target::~Target()
    11 {
    12 
    13 }
    14 
    15 
    16 Adapter::Adapter():
    17     adaptee(new Adaptee())
    18 {
    19 
    20 }
    21 
    22 
    23 Adapter::~Adapter()
    24 {
    25 
    26 }
    27 
    28 
    29 void Adapter::request()
    30 {
    31     adaptee->specificRequest();
    32 }
     1 #ifndef _ADAPTEE_H_
     2 #define _ADAPTEE_H_
     3 
     4 class Adaptee
     5 {
     6 public:
     7     Adaptee();
     8     ~Adaptee();
     9 
    10     void specificRequest();
    11 
    12 };
    13 
    14 
    15 #endif
     1 #include "Adaptee.h"
     2 #include <stdio.h>
     3 
     4 
     5 Adaptee::Adaptee()
     6 {
     7 
     8 }
     9 
    10 
    11 Adaptee::~Adaptee()
    12 {
    13 
    14 }
    15 
    16 
    17 void Adaptee::specificRequest()
    18 {
    19     fprintf(stderr, "this is specificRequest
    ");
    20 }
    1 #include "Adapter.h"
    2 
    3 
    4 int main()
    5 {
    6     Target* tar = new Adapter();
    7     tar->request();
    8     return 0;
    9 }
    1 g++ -o client client.cpp Adapter.cpp Adaptee.cpp

    运行结果

    image

  • 相关阅读:
    网络编程学习笔记:Socket编程
    C# url 路径转换 相对路径 转换为 绝对路径
    利用pycharm运行scrapy以及scrapy的配置
    基于scrapy的分布式爬虫抓取新浪微博个人信息和微博内容存入MySQL
    LeetCode 1. Two Sum
    【转载】C#异常Retry通用类
    【转载】WebDriver(C#)之十点使用心得
    c#值类型和引用类型
    percona5.7 源码安装
    android UI进阶之用ViewPager实现欢迎引导页面[转]
  • 原文地址:https://www.cnblogs.com/cxjchen/p/3159757.html
Copyright © 2020-2023  润新知