生活随笔
收集整理的這篇文章主要介紹了
设计模式之Adapter设计模式
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?這個設計模式是我這兩天剛學的,這兒算是我的讀書筆記發布出來是供大家一起學習,后面有我自己的感悟,下面是我網上整理的
?
以下情況使用適配器模式
? 你想使用一個已經存在的類,而它的接口不符合你的需求。
? 你想創建一個可以復用的類,該類可以與其他不相關的類或不可預見的類(即那些接口可能不一定兼容的類)協同工作。
? (僅適用于對象Adapter)你想使用一些已經存在的子類,但是不可能對每一個都進行子類化以匹配它們的接口。對象適配器可以適配它的父類接口。
?
其實現方式主要有兩種:
類適配器
?
對象適配器
其中:
? Target
— 定義Client使用的與特定領域相關的接口。
? Client
— 與符合Ta rg e t接口的對象協同。
? Adaptee
— 定義一個已經存在的接口,這個接口需要適配。
? Adapter
— 對Adaptee的接口與Target接口進行適配
具體的實現代碼如下:
類適配器
package?com.visionsky.DesignPattern;??interface?Target?{?????void?Request();?}??class?Adaptee?{?????void?SpecificRequst()?{?????????System.out.println("Adaptee's?SpecificRequst");?????}?}??class?Adapter?extends?Adaptee?implements?Target??{??????@Override?????public?void?Request()?{??????????System.out.println("Adapter's?Request");???????????super.SpecificRequst();?????}??}??public?class?AdapterDemo?{?????????????public?static?void?main(String[]?args)?{??????????????????Target?t=new?Adapter();?????????t.Request();?????}??}//我的點評:類適配器存在不靈活的地方因為他為了實現Adaptee 里的特殊需求而使用了繼承,我們知道繼承在OO里其實破壞了類的封裝性,這里如果被繼承的類Adaptee 改動一下那么Adapter類也會隨之改變這就破壞了OO里的原則破壞 了類的封裝性//而如果使用下面的對象適配器的話就不會出現這個問題,上面是完全寫死了的一種適配器不靈活,而下面你其實也可以通過傳入一個你需要適配的類型參數(使用泛T)如Adaptee 的類型然后使用反射動態創建出該類型的實例,使用現在流行的T4模板還可以創建出多種不同需求的適配器類型。?對象適配器
package?com.visionsky.DesignPattern;??interface?Target?{?????void?Request();?}??class?Adaptee?{?????void?SpecificRequst()?{?????????System.out.println("Adaptee's?SpecificRequst");?????}?}??class?Adapter??implements?Target??{??????private?Adaptee?adaptee;?????public?Adapter()?????{?????????this.adaptee=new?Adaptee();?????}??????????@Override?????public?void?Request()?{??????????System.out.println("Adapter's?Request");??????????adaptee.SpecificRequst();?????}??}??public?class?AdapterDemo?{?????????????public?static?void?main(String[]?args)?{??????????????????Target?t=new?Adapter();?????????t.Request();?????}??}?生活中的例子:
在生活中最簡單的例子就是電源適配器,如手機適配器,我們的家用電源是220V的,但是,對于手機來說,根本大不了這么多,所以,在這種情況下,需要電源適配器來為我們提供適合手機的電壓。
?
package?com.visionsky.DesignPattern;??public?class?AdaterDemoInLife?{?????????????public?static?void?main(String[]?args)?{??????????????????MobilePowerAdapter?mpa=new?MobilePowerAdapter();?????????mpa.GetPower10V();?????}??}??interface?ITarget?{?????int?GetPower10V();?}??class?Power?{?????int?GetPower220V()?{??????????return?220;?????}?}??class?MobilePowerAdapter??implements?ITarget??{?????private?Power?power;?????public?MobilePowerAdapter(?)?{???????????????????this.power?=?new?Power();?????}??????
????@Override?????public?int?GetPower10V()?{???????????????????power.GetPower220V();????????????????????return?10;?????}?}??
本文出自 “學習筆記” 博客,請務必保留此出處http://visionsky.blog.51cto.com/733317/384607
類別:設計模式┆閱讀(
2461)┆評論(
2) ┆ 返回博主首頁┆返回博客首頁
轉載于:https://www.cnblogs.com/kexb/p/3666334.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎
總結
以上是生活随笔為你收集整理的设计模式之Adapter设计模式的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。