码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2014-06-08 20:00:30      阅读:324      评论:0      收藏:0      [点我收藏+]

标签:c   style   class   blog   code   java   

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

简单描述:

大话设计模式中的截图:

bubuko.com,布布扣

代码例子:

AbstractPlayer类:

bubuko.com,布布扣
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 }
bubuko.com,布布扣

Forward类:

bubuko.com,布布扣
 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 }
bubuko.com,布布扣

Guard类:

bubuko.com,布布扣
 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 }
bubuko.com,布布扣

Translator类(适配器):

bubuko.com,布布扣
 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 }
bubuko.com,布布扣

Center(需要适配的类)类:

bubuko.com,布布扣
 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 }
bubuko.com,布布扣

客户端类:

bubuko.com,布布扣
 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 }
bubuko.com,布布扣

运行结果:

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

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

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

大话设计模式_适配器模式(Java代码),布布扣,bubuko.com

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

标签:c   style   class   blog   code   java   

原文地址:http://www.cnblogs.com/creasylai19/p/3775961.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!