設計模式之介面卡模式

2021-10-22 06:41:26 字數 2495 閱讀 6658

引入:

我的膝上型電腦的工作電壓是20v,而我國的家庭用電是220v,如何讓20v的膝上型電腦能夠在220v的電壓下工作?

答案:引入乙個電源介面卡(ac adapter),俗稱充電器或變壓器,有了這個電源介面卡,生活用電和膝上型電腦即可相容

在軟體開發中,有時也存在類似這種不相容的情況,我們也可以像引入乙個電源介面卡一樣引入乙個稱之為介面卡的角色來協調這些存在不相容的結構,這種設計方案即為介面卡模式。

概述:

與電源介面卡相似,在介面卡模式中引入了乙個被稱為介面卡(adapter)的包裝類,而它所包裝的物件稱為適配者(adapter),即被適配的類。

介面卡的實現就是把客戶類的請求轉化為對適配者的相應介面的呼叫。也就是說:當客戶類呼叫介面卡的方法時,在介面卡類的內部將呼叫適配者類的方法,而這

個過程對客戶類是透明的,客戶類並不直接訪問適配者類。因此,介面卡讓那些由於介面不相容而不能互動的類可以一起工作。

在介面卡模式中,我們通過增加乙個新的介面卡類來解決介面不相容的問題,使得原本沒有任何關係的類可以協同工作。

根據介面卡類與適配者類的關係不同,介面卡模式可分為物件介面卡和類介面卡兩種,在物件介面卡模式中,介面卡與適配者之間是關聯關係;在類介面卡模式中,介面卡與適配者之間是繼承(或實現)關係

介面卡模式定義如下:

介面卡模式既可以作為類結構型模式,也可以作為物件結構型模式。

案例:

舉個生活的小例子,手機充電能直接使用220v的電壓嘛?肯定是不行的,因此就要在電源處上進行電壓適配。

// 適配介面

public inte***ce ivoltage5v

public class phone  else if (ivoltage5v.output5v() > 5) }}

// 被適配的類

public class voltage220v

}

// 介面卡類

public class voltageadapter extends voltage220v implements ivoltage5v

}

public class client 

}測試結果:

類介面卡模式

家庭電壓:220伏

電壓5v,正常充電

分析:改進:根據「 合成復用原則」,在系統中盡量使用 關聯關係(聚合)來替代繼承關係

// 適配介面

public inte***ce ivoltage5v

public class phone  else if (ivoltage5v.output5v() > 5) }}

// 被適配的類

public class voltage220v

}

// 介面卡類

public class voltageadapter implements ivoltage5v

@override

public int output5v()

return dst;}}

public class client 

}測試結果:

=== 物件介面卡模式 ====

電壓=220伏

使用物件介面卡,進行轉換

適配完成,輸出電壓:5

電壓為 5v, 可以充電~~

概述:介面介面卡結構圖:

它是乙個介面,通常在該介面中宣告了大量的方法。

它是預設介面卡模式的核心類,使用空方法的形式實現了在serviceinte***ce介面中宣告的方法。通常將它定義為抽象類,因為對它進行例項化沒有任何意義。

它是預設介面卡類的子類,在沒有引入介面卡之前,它需要實現適配者介面,因此需要實現在適配者介面中定義的所有方法,而對於一些無須使用的方法也不得不提供空實現。

在有了預設介面卡之後,可以直接繼承該介面卡類,根據需要有選擇性地覆蓋在介面卡類中定義的方法。

1、主要優點

2、主要缺點

類介面卡主要缺點:

物件介面卡主要缺點:

3、適用場景

設計模式之介面卡模式(類介面卡模式)

介面卡模式,即定義乙個包裝類,用於包裝不相容介面的物件 包裝類 介面卡adapter 被包裝物件 適配者adaptee 被適配的類 把乙個類的介面變換成客戶端所期待的另一種介面,從而使原本介面不匹配而無法一起工作的兩個類能夠在一起工作。介面卡模式的形式分為 類的介面卡模式和物件的介面卡模式 模式原理...

設計模式之 介面卡模式

1,介面卡模式把乙個類的介面變換成客戶端所期待的另一種介面,從而使原本因介面不匹配而無法一起工作的兩個類能夠在一起工作 2,介面卡模式有兩種 1 類的介面卡模式 介面卡類繼承源類 這樣介面卡類就繼承了源類有的方法 並實現目標介面,實現在源類中沒有而在介面中有的方法,從而實現介面卡類有目標介面的所有方...

設計模式之介面卡模式

介面卡模式定義 將乙個類的介面,轉換成客戶期望的另乙個介面。介面卡讓原本介面不相容的類可以合作無間。簡單定義 封裝物件,並提供不同的介面。簡單例子 鴨子介面 package headfirst.adapter.ducks public inte ce duck 具體鴨子 package headfi...