设计模式——适配器模式

一、任务

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

 

二、类图

三、代码

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++

原文地址:https://www.cnblogs.com/Lizhichengweidashen/p/14204411.html