適配器模式(2)
阿新 • • 發佈:2019-01-31
圖片 調用 per 繼承 關系 同時 int 對象適配器 pan
適配器模式的定義:將一個類的接口變換成客戶端所期待的另一種接口,從而使原本因接口不匹配而無法在一起工作的兩個類能夠一起工作。
圖解:
A、B兩個圖框代表已經塑模成型的物體A和物體B,現在要求把A和B安裝在一起使用,如何安裝?兩者的接口不一致,是不可能安裝在一起使用的,那怎麽辦?引入一個物體C,如下:
引入物體C後,C適應了物體A的接口,同時也適應了物體B的接口,然後三者就可以組合成一個完整的物體;其中物體C就是適配器。
適配器模式的三個角色:
Target目標角色:客戶端所調用的接口;
Adaptee源角色:你想把誰轉換成目標角色,這個誰就是Adaptee;
Adapter適配器角色:適配器模式的核心角色,其他兩個角色都是已經存在的角色,而適配器角色是需要新建立的,他的職責非常簡單:把源角色轉換為目標角色(通過類繼承或者類關聯的方式);
適配器模式的兩種情況:
類適配器:類適配器是類間繼承;
Target角色:
public interface Target { /** * 目標角色已有的方法 */ void request(); }
public class ConcreteTarget implements Target { @Override public void request() { System.out.println("If you need any help,pls call me!"); } }
Adaptee源角色:
public class Adaptee { /** * 原有的業務邏輯 */ public void doSomething(){ System.out.println("I‘m kind of busy,leave me alone,pls!"); } }
Adapter適配器角色:
public class Adapter extends Adaptee implements Target { @Override public void request() {super.doSomething(); } }
客戶端調用:
public class Client { public static void main(String[] args) { //原有的業務邏輯 Target target = new ConcreteTarget(); target.request();//If you need any help,pls call me! //增加適配器後的邏輯 Target target1 = new Adapter(); target1.request();//I‘m kind of busy,leave me alone,pls! } }
對象適配器:是對象的合成關系,也可以說是類的關聯關系(用到的場景較多)
Target角色和Adaptee源角色同類適配器一樣,此處省略,唯一不一樣的地方在於適配器類Apdater的編寫
Adapter適配器:
public class Adapter implements Target { /** * 此處本應使用接口接收,但是源角色只有類,沒有接口,故使用類 */ private Adaptee adaptee = null; public Adapter(Adaptee adaptee){ this.adaptee = adaptee; } @Override public void request() { adaptee.doSomething(); } }
適配器模式的註意事項:
適配器模式最好在詳細設計階段不要考慮它,他不是為了解決還處在開發階段的問題,而是解決正在服役的項目問題;還有一點,項目一定要遵守依賴倒置原則和裏氏替換原則,否則即使再適合使用適配器的場合下,也會帶來非常大的改造
適配器模式(2)