適配器模式(Adapter Pattern)是指將一個類的接口轉換成客戶指望的另外一個接口,使本來的接口不兼容的類能夠一塊兒工做,屬於結構型設計模式。
適配器模式主要有3個角色:
被適配者(Adaptee):適配者即被適配的角色
好比買了一個歐標吹風機,和國內的標準並不匹配。這時,被適配的角色即爲國內的插座
適配器(Adapter):適配器能夠調用適配者轉換爲目標接口,即做爲一個轉換器,將一個不可以使用的接口轉換爲可用的接口
果斷的上了某東買了個接口轉換器
目標角色(Target):目標角色即爲適配器要轉換成的目標接口
轉換器提供的歐標插孔就是這裏咱們所說的目標角色或者目標接口
設計模式
以上文中的歐標插頭爲例
一、被適配者socket
/** * Description : . * * @author : laoyeye.net * @date : Created in 2020/7/25 20:56 */ public interface ChinaSocket { void socketByChina(); }
二、被適配者實現ide
/** * Description : . * * @author : laoyeye.net * @date : Created in 2020/7/25 21:08 */ public class ChinaSocketImpl implements ChinaSocket { @Override public void socketByChina() { System.out.println("插入國標電源"); } }
三、目標接口,歐標電源接口this
/** * Description : . * * @author : laoyeye.net * @date : Created in 2020/7/25 20:56 */ public interface EuropeSocket { void socketByEurope(); }
四、適配器,國標轉歐標.net
/** * Description : . * * @author : laoyeye.net * @date : Created in 2020/7/25 21:00 */ public class ChinaToEuAdapter implements EuropeSocket { /** * 須要適配的接口 */ private ChinaSocket chinaSocket; public ChinaToEuAdapter(ChinaSocket chinaSocke) { this.chinaSocket = chinaSocke; } @Override public void socketByEurope() { System.out.println("適配器,國標轉爲歐標"); chinaSocket.socketByChina(); } }
五、運行實現設計
/** * Description : . * * @author : zhangzhuo * @date : Created in 2020/7/25 21:03 */ public class HairDryer { /** * 指望的三項供電接口 */ private EuropeSocket europeSocket; public HairDryer(EuropeSocket europeSocket) { this.europeSocket = europeSocket; } public void work() { europeSocket.socketByEurope(); System.out.println("開始吹頭髮了"); } public static void main(String[] args) { // 國標插座 ChinaSocket chinaSocket = new ChinaSocketImpl(); //適配器轉換 ChinaToEuAdapter chinaToEuAdapter = new ChinaToEuAdapter(chinaSocket); HairDryer hairDryer = new HairDryer(chinaToEuAdapter); // 工做 hairDryer.work(); } }
效果:code
適配器,國標轉爲歐標 插入國標電源 開始吹頭髮了
哇哦,接口成功實現轉換,吹風機終於用起來了。對象
適配器模式我目前工做中其實不多用到,過多的適配器也不利於系統的維護接口
最後,你們有沒有感受上面那個案例,其實咱們上次講過的裝飾者模式也能夠實現呢。的確,這兩種模式均可以實現相似的效果,但卻又有所不一樣,好比:
裝飾者模式適合在不改變原有對象的基礎上,將功能附加在對象上,用於擴展一個類的功能。而本文所講的適配器模式主要適合在不改變原有接口的前提下,解決接口不兼容的問題。總得來講二者的主要區別就在於一個是裝飾,一個是來解決接口不兼容的問題,記住這兩點,相信在使用上就不會有疑問了ip