設計模式學習筆記 介面卡 Adapter 模式

2021-07-29 05:29:09 字數 4083 閱讀 3696

@(設計模式)[設計模式, 介面卡模式, adapter, 介面卡]

物件介面卡模式

介面卡模式中的角色

介面卡模式一般用於將已實現的功能,通過乙個轉換器,轉換為所需要的介面。

例如,變壓器就是乙個很好的例子,在我國,民用用電一般是220v交流電,但是手機充電一般是5v或者9v的直流電,這時候就可以通過乙個叫做「電源介面卡」的東西,將220v交流電轉換為5v或者9v的直流電。

基於繼承的介面卡模式。

類圖

banner類

package com.pc.adapter.example.inheritor;

/** * 旗幟類(實際情況)

* created by switch on 17/1/21.

*/public

class

banner

/*** 弱化旗幟標語,並展示

*/public

void

showwithparen()

/*** 強化旗幟標語,並展示

*/public

void

showwithaster()

}

print介面
package com.pc.adapter.example.inheritor;

/** * 列印介面(需求)

* created by switch on 17/1/21.

*/public

inte***ce

print

printbanner類
package com.pc.adapter.example.inheritor;

/** * 列印旗幟資訊**換裝置)

* created by switch on 17/1/21.

*/public

class

printbanner

extends

banner

implements

print

@override

public

void

printweak()

@override

public

void

printstrong()

}

測試類
package com.pc.adapter.example.inheritor.test;

import com.pc.adapter.example.inheritor.print;

import com.pc.adapter.example.inheritor.printbanner;

import org.junit.test;

/** * 旗幟介面卡測試——介面卡採用類介面卡模式

* 也就是基於繼承的介面卡模式

* created by switch on 17/1/21.

*/public

class

inheritorbanneradaptertest

}

執行結果
(我們的口號是,沒有蛀牙!)

*我們的口號是,沒有蛀牙!*

基於委託的介面卡模式。

類圖

banner類

package com.pc.adapter.example.delegation;

/** * 旗幟類(實際情況)

* created by switch on 17/1/21.

*/public

class

banner

/*** 弱化旗幟標語,並展示

*/public

void

showwithparen()

/*** 強化旗幟標語,並展示

*/public

void

showwithaster()

}

print類
package com.pc.adapter.example.delegation;

/** * 列印類(需求)

* created by switch on 17/1/21.

*/public

abstract

class

print

printbanner類
package com.pc.adapter.example.delegation;

/** * 列印旗幟資訊**換裝置)

* created by switch on 17/1/21.

*/public

class

printbanner

extends

print

@override

public

void

printweak()

@override

public

void

printstrong()

}

測試類
package com.pc.adapter.example.delegation.test;

import com.pc.adapter.example.delegation.print;

import com.pc.adapter.example.delegation.printbanner;

import org.junit.test;

/** * 旗幟介面卡測試——介面卡採用物件介面卡模式

* 也就是基於委託的介面卡模式

* created by switch on 17/1/21.

*/public

class

delegationbanneradaptertest

}

執行結果
(我們的口號是,沒有蛀牙!)

*我們的口號是,沒有蛀牙!*

該角色負責定義所需的方法。在案例中,由print介面(使用繼承時)和print類(使用委託時)扮演此角色。

該角色負責使用target角色所定義的方法進行具體處理。在案例中,由測試類扮演此角色。

注意不是adapt-er(適配)角色,而是adapt-ee(被適配)角色。adaptee是乙個持有既定方法的角色。在案例中,由banner類扮演此角色。

如果adaptee角色中的方法與target角色的方法相同,就不需要接下來的adapter角色了。

adapter模式的主人公。使用adaptee角色的方法來滿足target角色的需求,這是adapter模式的目的, 也是adapter角色的作用。在案例中,由printbanner類扮演這個角色。在類介面卡模式中,adapter角色通過繼承來使用adaptee角色,而在 物件介面卡模式中,adapter角色通過委託來使用adaptee角色。

類介面卡模式的類圖

物件介面卡模式的類圖

——————參考《**設計模式》

設計模式學習筆記 介面卡模式

乙個人,想從乙個地方到底另乙個地方,可以通過走路,開車,或者騎自行車等等。假設之前有一條鄉間小路,之前因為路況不好,人們只能通過走路,或者騎自行車通過。於是開發者針對這條路,開發itraffic這個介面,同時實現了 walk,bike這兩個具體類,但隨著經濟的發展,這條路被修建改善,路完全可以通過車...

設計模式學習筆記 介面卡模式

將乙個類的介面轉換成客戶希望的另外乙個介面。adapter模式使得原本由於介面不相容而不能一起工作的那些類可以在一起工作。定義客戶端期待的介面 public class target 定義需要適配的類 public class needadapter 定義介面卡 public class adapt...

設計模式 介面卡模式 類介面卡 物件介面卡

乙個小例子,便於理解,上 這是我們造的。現在想用這個方法。public class adaptee 類介面卡。對我們想要的方法封裝一下,target就能像之前一樣,呼叫request方法即可。public class adapter1 extends adaptee implements targe...