你的位置:首页 > ASP.net教程

[ASP.net教程]【设计模式】6、适配器模式


 

抽象类

 1 package com.shejimoshi.structural.Adapter; 2  3  4 /** 5  * 功能:适配器模式 6  *     将一个类的接口转换成客户希望的另外一个接口。adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作 7  * 适用性:你想使用一个已经存在的类,而它的接口不符合你的需求 8  *     你想创建一个可以复用的类,该类可以与其他不相关的类或不可预见的类协同工作 9  *     你想使用一些已经存在的子类,但是不可能对每一个都进行子类化以匹配它们的接口。对象适配器可以适配它的类接口10  * 时间:2016年2月17日下午5:43:4611  * 作者:cutter_point12 */13 public abstract class Player14 {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 Player10 {11 12   public Forwards(String name)13   {14     super(name);15   }16 17   @Override18   public void attack()19   {20     System.out.println("前锋" + name + "进攻");21   }22 23   @Override24   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 Player10 {11 12   public Center(String name)13   {14     super(name);15   }16 17   @Override18   public void attack()19   {20     System.out.println("中锋" + name + "进攻");21   }22 23   @Override24   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 Player10 {11 12   public Guards(String name)13   {14     super(name);15   }16 17   @Override18   public void attack()19   {20     System.out.println("后卫" + name + "进攻");21   }22 23   @Override24   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 Player10 {11   12   private ForeignCenter fc = new ForeignCenter();13   14   public Translator(String name)15   {16     super(name);17     fc.setName(name);18   }19 20   @Override21   public void attack()22   {23     fc.ForeignAttack();24   }25 26   @Override27   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 ForeignCenter10 {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 Test10 {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 !!