package JAVABasic; /** * 1、目標(Target):這就是所期待獲得的接口。 * 2、源(Adaptee):現有須要適配的接口。 * 3、適配器(Adapter):適配器類是本模式的核心。適配器把源接口轉換成目標接口。 * @author markGao * */ public class AdapterMode { public static void main(String[] args) { Target a = new Adapter(); a.sampleOperation1(); a.sampleOperation2(); } } class Adaptee { public void sampleOperation1() { System.out.println("方法名 " + Thread.currentThread().getStackTrace()[1].getMethodName()); System.out.println("類名 " + Thread.currentThread().getStackTrace()[1].getClassName()); } } interface Target { /** * Class Adaptee contains operation sampleOperation1. */ void sampleOperation1(); /** * Class Adaptee doesn't contain operation sampleOperation2. */ void sampleOperation2(); } class Adapter extends Adaptee implements Target { /** * Class Adaptee doesn't contain operation sampleOperation2. */ public void sampleOperation2() { // Write your code here System.out.println("文件名 " + Thread.currentThread().getStackTrace()[1].getFileName()); System.out.println("所在的行數 " + Thread.currentThread().getStackTrace()[1].getLineNumber()); } }
在咱們實際生活中也很容易看到這方面的例子,好比咱們要和一個外國人打交道,例如韓國 人,若是咱們沒有學習過韓語,這個韓國人也沒有學習過咱們漢語,在這種狀況下,咱們之間是很難進行直接交流溝通。爲了達到溝通的目的有兩個方法:1)改造 這個韓國人,使其可以用漢語進行溝通;2)請一個翻譯,在咱們和這個韓國人之間進行語言的協調。顯然第一種方式——改造這個韓國人的代價要高一些,咱們不 僅要從新培訓他漢語的學習,還有時間、態度等等因素。而第二個方式——請一個翻譯,就很好實現,並且成本低,還比較靈活,當咱們想換個日本人,再換個翻譯 就能夠了。java
在GOF設計模式中,Adapter能夠分爲類模式和對象模式兩種,類模式經過多重繼承實現,對象模式經過委託實現。設計模式
在Java中因爲沒有多重繼承機制,因此要想實現類模式的Adapter,就要進行相應 的改變:經過繼承Adaptee類實現Target接口方式實現。這種改變存在兩個問題:1)Target必須是一個接口而不能是一個類,不然 Adapter沒法implements實現;2)Adapter是繼承Adaptee的實現,而不是私有繼承,這就表示Adapter是一個 Adaptee的子類。學習