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

    一、任务

    实现一个双向适配器,使得猫可以学狗叫,狗可以学猫抓老鼠。

     

    二、类图

    三、代码

    1、Java

     1 package tutorial8;
     2 
     3 public class Adapter implements Dog,Cat {
     4     Dog dog=null;
     5     Cat cat=null;
     6     public Adapter(Cat cat) {
     7         this.cat=cat;
     8     }
     9     public Adapter(Dog dog) {
    10         this.dog=dog;
    11     }
    12     @Override
    13     public void bark() {
    14         // TODO 自动生成的方法存根
    15         cat.catchMouse();
    16         
    17     }
    18     @Override
    19     public void catchMouse() {
    20         // TODO 自动生成的方法存根
    21         dog.bark();
    22     }
    23     @Override
    24     public void catLook() {
    25         // TODO 自动生成的方法存根
    26         System.out.println("这只小动物看起来是小狗");
    27     }
    28     @Override
    29     public void dogLook() {
    30         // TODO 自动生成的方法存根
    31         System.out.println("这只小动物看起来是小猫");
    32     }
    33     
    34 }
    Adapter.java
    1 package tutorial8;
    2 
    3 public interface Cat {
    4 
    5     public void catchMouse();
    6     public void catLook();
    7 }
    Cat
    1 package tutorial8;
    2 
    3 public interface Dog {
    4     public void bark() ;
    5     public void dogLook() ;
    6 }
    Dog
     1 package tutorial8;
     2 
     3 public class CatTarget implements Cat {
     4     public void catLook() {
     5         System.out.println("这是一只小猫咪");
     6     }
     7 
     8     @Override
     9     public void catchMouse() {
    10         // TODO 自动生成的方法存根
    11         System.out.println("小猫抓老鼠的技能!!!");
    12     }
    13     
    14 }
    CatTarget
     1 package tutorial8;
     2 
     3 public class DogTarget implements Dog {
     4 
     5     public void dogLook() {
     6         System.out.println("这是一只小狗");
     7     }
     8 
     9     @Override
    10     public void bark() {
    11         // TODO 自动生成的方法存根
    12         System.out.println("小狗汪汪叫的技能");
    13     }
    14 }
    DogTarget
     1 package tutorial8;
     2 
     3 public class Client {
     4     public static void main(String[] args) {
     5         System.out.println("看到一只小动物:");
     6         //把狗设配成猫
     7         Cat fakercat=new Adapter(new DogTarget());
     8         fakercat.catLook();
     9         System.out.print("小狗学习猫咪");
    10         fakercat.catchMouse();
    11         //把猫设配成狗
    12         Dog fakerdog=new Adapter(new CatTarget());
    13         System.out.println("******************************");
    14         System.out.println("又看到一只小动物:");
    15         fakerdog.dogLook();
    16         
    17         System.out.print("猫咪学习小狗");
    18         fakerdog.bark();
    19     }
    20 
    21 
    22 }
    Client

    2、C++

     1 #include<iostream>
     2 using namespace std;
     3 
     4 
     5 
     6 class Dog
     7 {
     8 public:
     9     virtual void bark() {};
    10     virtual void dogLook() {};
    11 
    12 }; 
    13 class Cat
    14 {
    15 public:
    16     virtual void catchMouse() {};
    17     virtual void catLook() {};
    18 };
    19 
    20 class DogTarget:public Dog {
    21 public:
    22     void dogLook() {
    23         cout<<"这是一只小狗"<<endl;
    24     }
    25 
    26     
    27     void bark() {
    28         // TODO 自动生成的方法存根
    29         cout<<"小狗汪汪叫的技能"<<endl;
    30     }
    31 };
    32 class CatTarget :public Cat {
    33 public:
    34     void catLook() {
    35         cout<<"这是一只小猫咪"<<endl;
    36     }
    37 
    38 
    39     void catchMouse() {
    40         
    41         cout<<"小猫抓老鼠的技能!!!"<<endl;
    42     }
    43 };
    44 
    45 class Adapter :public Dog, public Cat {
    46     Dog dog ;
    47     Cat cat;
    48 public:
    49     Adapter(Cat *cat1) {
    50         cat = *cat1;
    51     }
    52     Adapter(Dog *dog1) {
    53         dog = *dog1;
    54     }
    55 
    56     void bark() {
    57 
    58         cat.catchMouse();
    59 
    60     }
    61     
    62     void catchMouse() {
    63 
    64         dog.bark();
    65     }
    66 
    67     void catLook() {
    68 
    69         cout<<"这只小动物看起来是小狗"<<endl;
    70     }
    71 
    72     void dogLook() {
    73     
    74         cout<<"这只小动物看起来是小猫"<<endl;
    75     }
    76 };
    77 void main() {
    78     cout << "看到一只小动物:" << endl;
    79     //把狗设配成猫
    80     Cat* fakercat = new Adapter(new DogTarget());
    81     fakercat->catLook();
    82     cout << "小狗学习猫咪" << endl;
    83     fakercat->catchMouse();
    84     //把猫设配成狗
    85     Dog* fakerdog = new Adapter(new CatTarget());
    86     cout << "******************************" << endl;
    87     cout << "又看到一只小动物:" << endl;
    88     fakerdog->dogLook();
    89 
    90     cout << "猫咪学习小狗" << endl;
    91     fakerdog->bark();
    92 }
    Client

    四、结果截图

    1、Java

    2、C++

  • 相关阅读:
    libevent源码学习之event
    游戏寻路A*算法
    游戏地图动态生成
    一个基于protocol buffer的RPC实现
    TCMalloc源码学习(四)(小内存块释放)
    TCMalloc源码学习(三)(小块内存分配)
    TCMalloc源码学习(二)
    第五十四篇 Linux相关——远程连接SSH
    第五十三篇 Linux相关——Web服务器
    第五十二篇 Linux相关——数据库服务MySQL
  • 原文地址:https://www.cnblogs.com/Lizhichengweidashen/p/14204411.html
Copyright © 2011-2022 走看看