適配器模式:將一個本不能兼容客戶端的類的接口通過適配器轉為可以兼容的接口。 這里有一個“中國學生接口”,定義了“說中國話”和“聽中國話兩個方法” //中國學生接口 public interface ChineseStudent { void speakChinese(); void listenChinese(); } //中國學生類 public class ChineseStudent1 implements ChineseStudent { public String name; public ChineseStudent1(String name){ this.name = name; } @Override public void speakChinese() { System.out.println("學生:" name "說話"); } @Override public void listenChinese() { System.out.println("學生:" name "聆聽"); } } //測試方法 public class Test { public static void main(String[] args) { ChineseStudent chineseStudent = new ChineseStudent1("zhangsan"); chineseStudent.speakChinese(); chineseStudent.listenChinese(); } } 測試結果: 學生:zhangsan說話 ? 此時如果來了一個外國學生呢,這個外國學生不會說中文并且也聽不懂中文,那么他如何去和其他中國學生交流呢,此時我們就需要一個“翻譯”——適配器 //外國學生類 public class ForeignStudent { private String name; public ForeignStudent(String name){ this.name = name; } public void speakEnglish(){ System.out.println("學生:" name "說話"); } public void listenEnglish() { System.out.println("學生:" name "聆聽"); } } ? //適配器類 public class Translator implements ChineseStudent{ //實例外國學生類 ForeignStudent foreignStudent = new ForeignStudent("Joe"); ? //測試方法 public class Test { public static void main(String[] args) { ChineseStudent chineseStudent = new ChineseStudent1("zhangsan"); chineseStudent.speakChinese(); chineseStudent.listenChinese(); ChineseStudent foreignStudent = new Translator(); foreignStudent.speakChinese(); foreignStudent.listenChinese(); } } 測試結果: 學生:zhangsan說話 這樣的話即使外國學生類不能直接實現(xiàn)“說中文”和“聽中文”方法,但是通過適配器就完成了這一操作,便兼容了ChineseStudent接口。 總結:雖然適配器模式可以去兼容接口,但是這種操作通常是維護時不希望去改變兼容方與被兼容方的類時才被考慮的方法,如果在開發(fā)時能考慮到接口不兼容的問題,及時解決,通常問題就不會擴大到去兼容接口的程度。 來源:https://www./content-1-306301.html |
|