摘要:適配器模式將一個(gè)類的接口轉(zhuǎn)換為客戶期望的另一個(gè)接口。取桔子包裝準(zhǔn)備用途蘋果盒代替把蘋果盒適配成桔子包裝盒桔子包裝適配器適配器模式結(jié)構(gòu)圖用法繼承,同時(shí)組合對象引入成員變量使和產(chǎn)生關(guān)聯(lián)。
適配器模式:將一個(gè)類的接口轉(zhuǎn)換為客戶期望的另一個(gè)接口。適配器讓原本接口不兼容的類可以合作無間。
場景:水果店賣有橘子和蘋果,橘子用橘子包裝盒,蘋果用蘋果包裝盒,顧客A來買橘子,但是沒有橘子包裝盒了,則用蘋果包裝盒暫時(shí)替代一下。
/** * 桔子 * */ public class Orange implements Fruit { private String name = ""; private int price = 70; public Orange(String name,int price){ this.price = price; this.name = name; } public void pack(OrangeBag bag){ bag.pack(); } @Override public int price() { return price; } @Override public void draw() { System.out.print("砂糖桔"); } public int accept(Visit visit){ return visit.sell(this); } public void setPrice(int price) { this.price = price; } } /** * 桔子包裝 * */ public class OrangeBag implements Bag { @Override public void pack() { System.out.print("--桔子使用網(wǎng)兜包裝"); } } /** * 蘋果包裝 * Created by Peter on 10/9 009. */ public class AppleBag implements Bag { @Override public void pack() { System.out.print("--蘋果使用紙箱包裝"); } } /** * 水果接口 */ public interface Fruit { int price(); void draw(); int accept(Visit visit); } /** * 包裝接口 */ public interface Bag { void pack(); }
測試代碼如下: main方法里面,new一個(gè)橘子,再獲取一個(gè)橘子包裝實(shí)例。
如今橘子包裝沒了,用蘋果包裝代替一下。
public class AdapterClient { public static void main(String[] args){ Orange orange = new Orange("peter",100); OrangeBag bag = getBag2(); orange.pack(bag); } /** * 取桔子包裝 * @return */ // private static OrangeBag getBag(){ // OrangeBag bag = new OrangeBag(); // return bag; // } private static OrangeBag getBag2(){ //準(zhǔn)備用途蘋果盒代替 AppleBag appleBag = new AppleBag(); //把蘋果盒適配成桔子包裝盒 OrangeBag orangeBag = new OrangeBagAdapter(appleBag); return orangeBag; } } /** * 桔子包裝適配器 */ public class OrangeBagAdapter extends OrangeBag { private AppleBag appleBag; public OrangeBagAdapter(AppleBag appleBag){ this.appleBag = appleBag; } @Override public void pack() { appleBag.pack(); } }
適配器模式結(jié)構(gòu)圖:
用法:
1.OrangeBagAdapter繼承OrangeBag,同時(shí)組合AppleBag對象(引入成員變量),使OrangeBag和AppleBag產(chǎn)生關(guān)聯(lián)。
2.當(dāng)OrangeBag目標(biāo)方法被調(diào)用時(shí),OrangeBagAdapter轉(zhuǎn)調(diào)AppleBag的對象方法。
備注:OrangeBag和AppleBag都是已有類,是系統(tǒng)已有方法。整個(gè)過程只需要新增一個(gè)適配器類,去充當(dāng)OrangeBag的實(shí)現(xiàn)。
這個(gè)適配器模式充滿良好的OO設(shè)計(jì)原則:
1.使用了對象的組合,以修改的接口(即上文的OrangeBagAdapter的pack()方法)包裝被適配者(即上文的蘋果包裝AppleBag);
2.這種做法還有額外的優(yōu)點(diǎn)就是被適配者的的任何子類都可以搭配著適配器使用。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/74543.html
摘要:本文參考于設(shè)計(jì)模式課程設(shè)計(jì)模式之適配器模式設(shè)計(jì)模式是一套被反復(fù)使用的多數(shù)人知曉的經(jīng)過分類編目的代碼設(shè)計(jì)經(jīng)驗(yàn)的總結(jié)。第一個(gè)設(shè)計(jì)模式是適配器模式??偟膩碚f適配器就是的模式,與修飾模式直接無感使用不同,適配器模式使用對象變?yōu)椤? 本文參考于:設(shè)計(jì)模式課程設(shè)計(jì)模式之適配器模式 設(shè)計(jì)模式是一套被反復(fù)使用的、多數(shù)人知曉的、經(jīng)過分類編目的、代碼設(shè)計(jì)經(jīng)驗(yàn)的總結(jié)。使用設(shè)計(jì)模式是為了重用代碼、讓代碼更容易被...
摘要:適配器模式之?dāng)?shù)據(jù)格式轉(zhuǎn)換適配器模式不僅可以起到適配接口名的作用,它另外還有一個(gè)功能就是能統(tǒng)一不同格式的作用。我們的目的就是在程序中,不要出現(xiàn)適配器模式,但考慮到實(shí)際,這也是不可能的,所以盡量將代碼設(shè)計(jì)符合規(guī)范是非常必要的。 這個(gè)模式應(yīng)該算是除了單例模式以外最簡單的一個(gè)模式,沒有多余的類,這個(gè)模式只有一個(gè)職責(zé),就是轉(zhuǎn)換的你接口參數(shù),歸一化接口調(diào)用函數(shù),同意參數(shù)格式。 說人話~其實(shí)就是,將...
摘要:舊接口格式和使用者不兼容,中間加一個(gè)適配器轉(zhuǎn)換接口。模式作用使用一個(gè)已經(jīng)存在的對象,但其方法或接口不符合你的要求。 原文博客地址:https://finget.github.io/2018/11/22/adapter/ 適配器模式 適配器模式(Adapter)是將一個(gè)類(對象)的接口(方法或?qū)傩?轉(zhuǎn)換成客戶希望的另外一個(gè)接口(方法或?qū)傩?,適配器模式使得原本由于接口不兼容而不能一起工作...
摘要:定義和類型定義將一個(gè)類的接口轉(zhuǎn)換成客戶期望的另一個(gè)接口,適配器模式讓那些不兼容的類可以一起工作。類型結(jié)構(gòu)型類適配器模式類適配器模式使用繼承的方式去實(shí)現(xiàn)接口適配。它是適配器模式的核心。 0x01.定義和類型 定義:將一個(gè)類的接口轉(zhuǎn)換成客戶期望的另一個(gè)接口,適配器模式讓那些不兼容的類可以一起工作。 類型:結(jié)構(gòu)型 a.類適配器模式 類適配器模式:使用繼承的方式去實(shí)現(xiàn)接口適配。 UML:...
摘要:簡介適配器模式有時(shí)候也稱包裝樣式或者包裝將一個(gè)類的接口適配成用戶所期待的。應(yīng)用場景如程序數(shù)據(jù)庫有關(guān)聯(lián)等操作,而你需要根據(jù)情況換數(shù)據(jù)庫操作時(shí),可以使用適配器模式統(tǒng)一接口,這樣代碼中除了數(shù)據(jù)庫配置之外,就不需要做而外的更改。 簡介 適配器模式(有時(shí)候也稱包裝樣式或者包裝)將一個(gè)類的接口適配成用戶所期待的。一個(gè)適配允許通常因?yàn)榻涌诓患嫒荻荒茉谝黄鸸ぷ鞯念惞ぷ髟谝黄稹?UML 角色 Tar...
閱讀 1616·2021-09-24 10:38
閱讀 1539·2021-09-22 15:15
閱讀 3095·2021-09-09 09:33
閱讀 926·2019-08-30 11:08
閱讀 669·2019-08-30 10:52
閱讀 1278·2019-08-30 10:52
閱讀 2370·2019-08-28 18:01
閱讀 548·2019-08-28 17:55