zoukankan      html  css  js  c++  java
  • 适配器模式

    【1】什么是适配器模式?

    将一个类的接口转换成客户希望的另外一个接口。

    Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。

    【2】适配器模式的代码示例:

    代码示例如下1:

     1 #include <iostream>
     2 #include <string>
     3 using namespace std;
     4 
     5 class Adaptee
     6 {
     7 public:
     8     virtual void myRequest()
     9     {
    10         cout << "实际上的接口" << endl;
    11     }
    12 };
    13 
    14 class Target
    15 {
    16 public:
    17     virtual void request() = 0;
    18     virtual ~Target(){}
    19 };
    20 
    21 class Adapter : public Target
    22 {
    23 private:
    24     Adaptee adaptee;
    25 public:
    26     void request()
    27     {
    28         adaptee.myRequest();
    29     }
    30 };
    31 
    32 int main()
    33 {
    34     Target *target = new Adapter();
    35     target->request();
    36     delete target;
    37     return 0;
    38 }
    39 //Result:
    40 //实际上的接口
    View Code

    代码示例如下2:

      1 #include <iostream>
      2 #include <string>
      3 using namespace std;
      4 
      5 class Player
      6 {
      7 public:
      8     string name;
      9     Player(string name)
     10     {
     11         this->name = name;
     12     }
     13     virtual void attack() = 0;
     14     virtual void defence() = 0;
     15 }; 
     16 
     17 class Forwards : public Player
     18 {
     19 public:
     20     Forwards(string name) : Player(name){}
     21     void attack()
     22     {
     23         cout << name << "前锋进攻" << endl;
     24     }
     25     void defence()
     26     {
     27         cout << name << "前锋防守" << endl;
     28     }
     29 };
     30 
     31 class Center : public Player
     32 {
     33 public:
     34     Center(string name) : Player(name){}
     35     void attack()
     36     {
     37         cout << name << "中锋进攻" << endl;
     38     }
     39     void defence()
     40     {
     41         cout << name << "中锋防守" << endl;
     42     }
     43 };
     44 
     45 class Backwards : public Player
     46 {
     47 public:
     48     Backwards(string name) : Player(name){}
     49     void attack()
     50     {
     51         cout << name << "后卫进攻" << endl;
     52     }
     53     void defence()
     54     {
     55         cout << name << "后卫防守" << endl;
     56     }
     57 };
     58 /*****************************************************************/
     59 class ForeignCenter
     60 {
     61 public:
     62     string name;
     63     ForeignCenter(string name)
     64     {
     65         this->name = name;
     66     }
     67     void myAttack()
     68     {
     69         cout << name << "外籍中锋进攻" << endl;
     70     }
     71     void myDefence()
     72     {
     73         cout << name << "外籍中锋防守" << endl;
     74     }
     75 };
     76 /*****************************************************************/
     77 class Translator : public Player
     78 {
     79 private:
     80     ForeignCenter *fc;
     81 public:
     82     Translator(string name) : Player(name)
     83     {
     84         fc = new ForeignCenter(name); 
     85     }
     86     void attack()
     87     {
     88         fc->myAttack();
     89     }
     90     void defence()
     91     {
     92         fc->myDefence();
     93     }
     94 };
     95 /*****************************************************************/
     96 int main()
     97 {
     98     Player *p1 = new Center("李俊宏");
     99     p1->attack();
    100     p1->defence();
    101     
    102     Translator *tl = new Translator("姚明");
    103     tl->attack();
    104     tl->defence();
    105     
    106     return 0;
    107 }
    108 //Result:
    109 /*
    110 李俊宏中锋进攻
    111 李俊宏中锋防守
    112 姚明外籍中锋进攻
    113 姚明外籍中锋防守
    114 */
    View Code

     

    Good  Good  Study, Day  Day  Up.

    顺序  选择  循环   总结

  • 相关阅读:
    【手绘漫画】图解LeetCode之x 的平方根(LeetCode 69题)
    tcp 发送长度9 实际组包49
    tcp 发送报文长度和响应报文长度
    http 响应报文
    中台翻车纪实:一年叫停,员工转岗被裁,资源全浪费
    再也不怕女朋友问我二分查找了!【手绘漫画】图解二分查找(修订版)(LeetCode 704题)
    我的Hexo-Github博客搭建笔记
    J
    怎样使用npm打包公布nodejs程序包
    JQuery Jcrop—JQuery Jcrop 图像裁剪工具学习
  • 原文地址:https://www.cnblogs.com/Braveliu/p/3946831.html
Copyright © 2011-2022 走看看