首页 > 代码库 > 大话设计模式_适配器模式(Java代码)

大话设计模式_适配器模式(Java代码)

适配器模式:将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

简单描述:

大话设计模式中的截图:

代码例子:

AbstractPlayer类:

1 package com.longsheng.adapter;
2 
3 public abstract class AbstractPlayer {
4 
5     public abstract void attack();
6 
7     public abstract void defence();
8 
9 }

Forward类:

 1 package com.longsheng.adapter;
 2 
 3 public class Forward extends AbstractPlayer {
 4 
 5     private String name;
 6     
 7     public Forward( String name ) {
 8         this.name = name;
 9     }
10     
11     @Override
12     public void attack() {
13         System.out.println("前锋:" + name + ",进攻");
14     }
15 
16     @Override
17     public void defence() {
18         System.out.println("前锋:" + name + ",防守");
19     }
20 
21 }

Guard类:

 1 package com.longsheng.adapter;
 2 
 3 public class Guard extends AbstractPlayer {
 4 
 5     private String name;
 6     
 7     public Guard( String name ) {
 8         this.name = name;
 9     }
10     
11     @Override
12     public void attack() {
13         System.out.println("后卫:" + name + ",进攻");
14     }
15 
16     @Override
17     public void defence() {
18         System.out.println("后卫:" + name + ",防守");
19     }
20 
21 }

Translator类(适配器):

 1 package com.longsheng.adapter;
 2 
 3 public class Translator extends AbstractPlayer {
 4 
 5     private Center mCenter;
 6     
 7     public Translator( String name ) {
 8         mCenter = new Center(name);
 9     }
10     
11     @Override
12     public void attack() {
13         mCenter.myAttack();
14     }
15 
16     @Override
17     public void defence() {
18         mCenter.myDefence();
19     }
20 
21 }

Center(需要适配的类)类:

 1 package com.longsheng.adapter;
 2 
 3 public class Center {
 4 
 5     private String name;
 6     
 7     public Center( String name ) {
 8         this.name = name;
 9     }
10     
11     public void myAttack() {
12         System.out.println("我是中锋: " + name + ",我要抢板和内线进攻");
13     }
14     
15     public void myDefence() {
16         System.out.println("我是中锋: " + name + ",我要盖帽和防守");
17     }
18 }

客户端类:

 1 package com.longsheng.adapter;
 2 
 3 public class Client {
 4 
 5     public static void main(String[] args) {
 6         AbstractPlayer[] team = new AbstractPlayer[3];
 7         team[0] = new Forward("小李");
 8         team[1] = new Guard("小郭");
 9         team[2] = new Translator("小黎");
10         
11         for (AbstractPlayer player : team) {
12             player.attack();
13             player.defence();
14         }
15     }
16 
17 }

运行结果:

1 前锋:小李,进攻
2 前锋:小李,防守
3 后卫:小郭,进攻
4 后卫:小郭,防守
5 我是中锋: 小黎,我要抢板和内线进攻
6 我是中锋: 小黎,我要盖帽和防守

要使用一个已经存在的类,如果它的接口,也就是它的方法和你要求的不相符时,可以考虑使用适配器模式,这样客户端可以统一调用同一接口。另外,需要注意,适配器只在双方都不太容易修改的时候再使用,而不是一开始有不同就使用。

适配器模式主要应用于希望复用一些现存的类,但接口又与复用环境要求不一致的情况