一、任务
实现一个双向适配器,使得猫可以学狗叫,狗可以学猫抓老鼠。
二、类图
三、代码
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 }
1 package tutorial8; 2 3 public interface Cat { 4 5 public void catchMouse(); 6 public void catLook(); 7 }
1 package tutorial8; 2 3 public interface Dog { 4 public void bark() ; 5 public void dogLook() ; 6 }
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 }
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 }
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 }
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 }
四、结果截图
1、Java
2、C++