介面卡模式定義:將乙個類的介面變成客戶端所期待的另一種介面,從而使原本因介面不匹配而無法在一起工作的兩個類能夠在一起工作。
介面卡模式包含兩種,一種是類介面卡,另一種是物件介面卡。類介面卡是通過類的繼承實現的適配,而物件介面卡是通過物件間的關聯關係,組合關係實現的適配。二者在實際專案中都會經常用到,由於物件介面卡是通過類間的關聯關係進行耦合的,因此在設計時就可以做到比較靈活,而類介面卡就只能通過覆寫源角色的方法進行拓展,在實際專案中,物件介面卡使用到的場景相對較多。開發中也推薦多使用組合關係,而儘量減少繼承關係,這是一種很好的程式設計習慣,就是使用物件介面卡,為什麼呢,一直記得在一本書裡看過一句話,組合比繼承靈活。
介面卡模式是一種補救模式,他可以讓你從因業務擴充套件而系統無法迅速適應的苦惱中解脫出來。我們在進行系統開發時,不管之前的可行性分析、需求分析、系統設計處理的多麼完美,總會在關鍵時候、關鍵場合出現一些「意外」。這些「意外」,該來的還是要來,躲是躲不過的,而這時就是我們的介面卡模式的用武之地。介面卡模式最好在設計階段不要考慮它,它不是為了解決還處在開發階段的問題,而是解決正在服役的專案問題,沒有乙個系統分析師會再做詳細設計時考慮使用介面卡模式。
介面卡模式的角色說明:
介面卡模式優點:
介面卡模式可以讓兩個沒有任何關係的類在一起執行,只要介面卡這個角色能夠搞定他們就成。
增加了類的透明性。我們訪問的是目標角色,但是實現卻在源角色裡。
提高了類的復用度。源角色在原有系統中還是可以正常使用的。
靈活性非常好。不想要介面卡時,刪掉這個介面卡就好了,其他**不用改。
1. 模版**
目標角色。目標角色是乙個已經在正式執行的角色,不可能修改角色中的方法,能做的只是如何去實現介面中的方法,而且通常情況下,目標角色是乙個介面或者抽象類。
public inte***ce target
目標角色的實現類,乙個正在服役的目標角色。
public class concretetarget implements target
}
源角色。源角色也是已經在服役狀態。
public class adaptee
}
介面卡角色,物件介面卡和類介面卡。
物件介面卡**:
public class adapter implements target
public void request()
}
類介面卡**:
public class adapter extends adaptee implements target
}
場景類:
public class client
}
2. 手機電源介面卡例子,家用電源是220v的,但是,對於手機來說,根本大不了這麼多,所以,在這種情況下,需要電源介面卡來為我們提供適合手機的電壓。
public class client
}inte***ce target
class power
}class mobilepoweradapter implements target
@override
public int getpower10v()
}
3. 最後乙個例子:
public inte***ce iouteruserbaseinfo
public inte***ce iouteruserhomeinfo
public inte***ce iouteruserofficeinfo
public class outeruserbaseinfo implements iouteruserbaseinfo
}public class outeruserhomeinfo implements iouteruserhomeinfo
}public class outeruserofficeinfo implements iouteruserofficeinfo
}//使用者資訊物件
public inte***ce iuserinfo
public class userinfo implements iuserinfo
/* * 獲得家庭**號碼
*/public string gethometelnumber()
/* * 員工的職位,是部門經理還是小兵
*/public string getjobposition()
/* * 手機號碼
*/public string getmobilenumber()
/* * 辦公室**,煩躁的時候最好「不小心」把**線踢掉,我經常這麼幹,對己對人都有好處
*/public string getofficetelnumber()
/* * 姓名了,這個老重要了
*/public string getusername()
}//把outeruser包裝成userinfo
@suppresswarnings("all")
public class outeruserinfo implements iuserinfo
//家庭位址
public string gethomeaddress()
//家庭**號碼
public string gethometelnumber()
//職位資訊
public string getjobposition()
//手機號碼
public string getmobilenumber()
//辦公**
public string getofficetelnumber()
// 員工的名稱
public string getusername()
}//這就是我們具體的應用了,比如老闆要查所有的20-30的女性資訊
public class client
}}
介面卡 JAVA設計模式
介面卡就是讓實現不同介面的類協同工作。1.定義乙個提供給客戶的目標介面target 2.定義乙個需要適配的類result 3.定義乙個介面卡adapter 對使用者的介面 public inte ce target 需要適配的類,此介面可能實現了其它的介面如usb3介面等。public class ...
java 介面卡設計模式
a.什麼是介面卡 在使用 的時候,需要定義乙個類事件 介面.通常介面中有多個方法,而程式中不一定所有的都用到,但又必須重寫,這很繁瑣.介面卡簡化了這些操作,我們定義 時只要繼承介面卡,然後重寫需要的方法即可.b.介面卡原理 介面卡就是乙個類,實現了 介面,所有抽象方法都重寫了,但是方法全是空的.介面...
JAVA設計模式 介面卡模式
介面卡模式 要點 1 介面卡模式主要應用於 希望復用一些現存的類,但是介面又與復用環境要求不一致的情況 在遺留 復用 類庫遷移等方面非常有用。2 介面卡模式有物件介面卡和類介面卡兩種形式的實現結構,但是類介面卡採用 多繼承 的實現方式,帶來了不良的高耦合,所以一般不推薦使用。物件介面卡採用 物件組合...