抽象類 1 package com.shejimoshi.structural.Adapter; 2 3 4 /** 5 * 功能:適配器模式 6 * 將一個類的介面轉換成客戶希望的另外一個介面。adapter模式使得原本由於介面不相容而不能一起工作的那些類可以一起工作 7 * 適用性:你想使用一個
抽象類
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 !!