@(設計模式)[設計模式, 介面卡模式, 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...