適配器模式:將一個本不能兼容客戶端的類的接口經過適配器轉爲能夠兼容的接口。ide
這裏有一個「中國學生接口」,定義了「說中國話」和「聽中國話兩個方法」測試
//中國學生接口 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(); } }
測試結果:this
學生:zhangsan說話
學生:zhangsan聆聽spa
此時若是來了一個外國學生呢,這個外國學生不會說中文而且也聽不懂中文,那麼他如何去和其餘中國學生交流呢,此時咱們就須要一個「翻譯」——適配器翻譯
//外國學生類 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");
@Override public void speakChinese() { foreignStudent.speakEnglish(); } @Override public void listenChinese() { foreignStudent.listenEnglish(); } }
//測試方法 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(); } }
測試結果:code
學生:zhangsan說話
學生:zhangsan聆聽
學生:Joe說話
學生:Joe聆聽blog
這樣的話即便外國學生類不能直接實現「說中文」和「聽中文」方法,可是經過適配器就完成了這一操做,便兼容了ChineseStudent接口。接口
總結:雖然適配器模式能夠去兼容接口,可是這種操做一般是維護時不但願去改變兼容方與被兼容方的類時才被考慮的方法,若是在開發時能考慮到接口不兼容的問題,及時解決,一般問題就不會擴大到去兼容接口的程度。開發