【设计模式】6、适配器模式

抽象类

 1 package com.shejimoshi.structural.Adapter;
 2 
 3 
 4 /**
 5  * 功能:适配器模式
 6  *         将一个类的接口转换成客户希望的另外一个接口。adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作
 7  * 适用性:你想使用一个已经存在的类,而它的接口不符合你的需求
 8  *          你想创建一个可以复用的类,该类可以与其他不相关的类或不可预见的类协同工作
 9  *         你想使用一些已经存在的子类,但是不可能对每一个都进行子类化以匹配它们的接口。对象适配器可以适配它的类接口
10  * 时间:2016年2月17日下午5:43:46
11  * 作者:cutter_point
12  */
13 public abstract class Player
14 {
15     protected String name;    //运动员名字
16     
17     public Player(String name)
18     {
19         this.name = name;
20     }
21     
22     //进攻
23     public abstract void attack();
24     //防守
25     public abstract void defense();
26 }

前锋

 1 package com.shejimoshi.structural.Adapter;
 2 
 3 
 4 /**
 5  * 功能:这个是我们的前锋类,这个我们不需要适配
 6  * 时间:2016年2月17日下午5:50:01
 7  * 作者:cutter_point
 8  */
 9 public class Forwards extends Player
10 {
11 
12     public Forwards(String name)
13     {
14         super(name);
15     }
16 
17     @Override
18     public void attack()
19     {
20         System.out.println("前锋" + name + "进攻");
21     }
22 
23     @Override
24     public void defense()
25     {
26         System.out.println("前锋" + name + "防守");
27     }
28 
29 }

中锋

 1 package com.shejimoshi.structural.Adapter;
 2 
 3 
 4 /**
 5  * 功能:我们的中锋类
 6  * 时间:2016年2月17日下午5:54:50
 7  * 作者:cutter_point
 8  */
 9 public class Center extends Player
10 {
11 
12     public Center(String name)
13     {
14         super(name);
15     }
16 
17     @Override
18     public void attack()
19     {
20         System.out.println("中锋" + name + "进攻");
21     }
22 
23     @Override
24     public void defense()
25     {
26         System.out.println("中锋" + name + "防守");
27     }
28 
29 }

后卫

 1 package com.shejimoshi.structural.Adapter;
 2 
 3 
 4 /**
 5  * 功能:后卫
 6  * 时间:2016年2月17日下午5:56:12
 7  * 作者:cutter_point
 8  */
 9 public class Guards extends Player
10 {
11 
12     public Guards(String name)
13     {
14         super(name);
15     }
16 
17     @Override
18     public void attack()
19     {
20         System.out.println("后卫" + name + "进攻");
21     }
22 
23     @Override
24     public void defense()
25     {
26         System.out.println("后卫" + name + "防守");
27     }
28 
29 }

翻译者,我们的适配器类

 1 package com.shejimoshi.structural.Adapter;
 2 
 3 
 4 /**
 5  * 功能:翻译者,为了适配外籍中锋
 6  * 时间:2016年2月17日下午6:00:36
 7  * 作者:cutter_point
 8  */
 9 public class Translator extends Player
10 {
11     
12     private ForeignCenter fc = new ForeignCenter();
13     
14     public Translator(String name)
15     {
16         super(name);
17         fc.setName(name);
18     }
19 
20     @Override
21     public void attack()
22     {
23         fc.ForeignAttack();
24     }
25 
26     @Override
27     public void defense()
28     {
29         fc.foreignDefense();
30     }
31 
32 }

被适配类,外籍中锋

 1 package com.shejimoshi.structural.Adapter;
 2 
 3 
 4 /**
 5  * 功能:外籍中锋
 6  * 时间:2016年2月17日下午5:57:09
 7  * 作者:cutter_point
 8  */
 9 public class ForeignCenter
10 {
11     private String name;
12     
13     //默认构造函数
14     public ForeignCenter()
15     {}
16     
17     public ForeignCenter(String name)
18     {
19         this.name = name;
20     }
21     
22     //进攻
23     public void ForeignAttack()
24     {
25         System.out.println("foreignCenter" + name + "attack !!");
26     }
27     
28     //防守
29     public void foreignDefense()
30     {
31         System.out.println("foreignCenter" + name + "defense !!");
32     }
33 
34     public String getName()
35     {
36         return name;
37     }
38 
39     public void setName(String name)
40     {
41         this.name = name;
42     }
43     
44 }

测试代码:

 1 package com.shejimoshi.structural.Adapter;
 2 
 3 
 4 /**
 5  * 功能:适配器模式的使用
 6  * 时间:2016年2月17日下午6:03:03
 7  * 作者:cutter_point
 8  */
 9 public class Test
10 {
11     public static void main(String[] args)
12     {
13         Player z = new Forwards("周星驰");
14         z.attack();
15         
16         Player y = new Center("姚明");
17         y.attack();
18         
19         //使用翻译者作为适配器使用外籍中锋类
20         Player cp = new Translator("cutter_point");
21         
22         cp.attack();
23         cp.defense();
24         
25     }
26 }

显示结果:

1 前锋周星驰进攻
2 中锋姚明进攻
3 foreignCentercutter_pointattack !!
4 foreignCentercutter_pointdefense !!
原文地址:https://www.cnblogs.com/cutter-point/p/5196246.html