「介面卡」在我們生活中很常見,像有些電器的工作電壓是20v,但是家庭電壓是220v,產生了不相容的問題。但是由於有介面卡這種東西,就能解決這個不相容的問題。
在軟體開發領域,我們也會碰到這樣的問題,兩個物件/類之間不相容,可以引入乙個「介面卡」來協調這些不相容的結構。介面卡模式是乙個結構型設計模式。
在物件介面卡模式中,介面卡與適配者之間是關聯關係。
在物件介面卡模式中通常有以下角色:目標抽象類、介面卡類和介面卡者類。
目標抽象類:這個定義的是提供給使用者使用的介面;
介面卡類:介面卡類就是乙個轉換器,將不相容的介面轉化成乙個相容的介面,這個類是介面卡模式的核心;
適配者類:被適配的物件,也就是使用者想要使用的方法。
物件介面卡用得比較頻繁,因為很多類被封裝後,沒有源**了,所以在沒有辦法修改源**的情況下,我們就需要使用物件介面卡。
//適配者類
public class jack220v
}//面向使用者的插口(使用者期盼看到的)
public class jackuser
}//介面卡類
class adapter extends jackuser
} //客戶端類
public class client
}
我們向使用者提供了乙個插口,這個插口可以連線220v的電路,但是我們是通過介面卡來進行轉化的。
在現實案例中,類介面卡會比較少用。物件介面卡用得頻繁,類介面卡的使用受到很多限制。
物件介面卡模式中介面卡和適配者之間是關聯關係,而類介面卡模式中介面卡和適配者是繼承關係。
inte***ce target
public class adaptee
}class adapter extends adaptee implements target
} public class client
}
再說一次!物件介面卡模式中介面卡和適配者之間是關聯關係,而類介面卡模式中介面卡和適配者是繼承關係。現在有這麼一種情況,我們需要實現乙個介面,但是不需要實現乙個介面裡的所有方法,我們應該怎麼做?
可以選擇這樣,我們先用乙個抽象類實現該介面。這樣一來,我們的介面卡可以直接繼承這個介面卡類。介面的方法必須全部覆蓋,但是由於有抽象類把這些方法定義成了空方法,我們只需要選擇性的覆蓋即可。
在預設介面卡模式中,通常包含如下三個角色:適配者介面、預設介面卡類、具體業務類。
適配者介面宣告了大量的方法。
預設介面卡類是預設介面卡模式的核心,實現適配者介面,它通常是抽象的,可以使用空方法來定義適配者類的方法。
具體業務類是預設介面卡的子類,直接繼承介面卡類,可以有選擇地對介面卡類中定義的方法進行覆蓋。
優點:由於有了介面卡,我們不用去修改原有的結構,就像有了乙個介面卡,我們就不用調整電壓啦。
可擴充套件性也很強,在不修改源**的基礎上,我們又能增加一些新的介面卡類。
缺點:有一些程式語言不支援多重繼承,不能同時適配多個適配者。其次,有些情況下,適配者模式的實現過程會比較麻煩、複雜一些。
2017/10/25 22:41:05 @author:雲都小生
設計模式 介面卡模式 類介面卡 物件介面卡
乙個小例子,便於理解,上 這是我們造的。現在想用這個方法。public class adaptee 類介面卡。對我們想要的方法封裝一下,target就能像之前一樣,呼叫request方法即可。public class adapter1 extends adaptee implements targe...
設計模式之介面卡模式(類介面卡模式)
介面卡模式,即定義乙個包裝類,用於包裝不相容介面的物件 包裝類 介面卡adapter 被包裝物件 適配者adaptee 被適配的類 把乙個類的介面變換成客戶端所期待的另一種介面,從而使原本介面不匹配而無法一起工作的兩個類能夠在一起工作。介面卡模式的形式分為 類的介面卡模式和物件的介面卡模式 模式原理...
設計模式 介面卡模式
01 02 author rollen holt 設計模式之 介面卡模式 03 04 05 inte ce window 11 12 abstract class windowadapter 16 public void close 19 public void activated 22 publi...