zoukankan      html  css  js  c++  java
  • 适配器模式及C++实现

    适配器模式及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

     

     

     

     

     

    分类: 设计模式
    标签: 设计模式

  • 相关阅读:
    LintCode: Convert Sorted Array to Binary Search Tree With Minimal Height
    LNMP企业应用部署全过程(基于DEDE后台)
    提高Web服务器并发响应的经历
    提高Web服务器并发响应的经历
    提高Web服务器并发响应的经历
    提高Web服务器并发响应的经历
    华为设备RIP实施和理论详解
    华为设备RIP实施和理论详解
    MySQL 官方 Docker 镜像的使用
    Docker之docker设置系统的环境变量
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/3163127.html
Copyright © 2011-2022 走看看