資源描述:
《6適配器模式.ppt》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、第六講適配器模式場景在朋友聚會(huì)上碰到了一個(gè)美女Sarah,從香港來的,可我不會(huì)說粵語,她不會(huì)說普通話,只好求助于我會(huì)粵語的朋友kent了,他作為我和Sarah之間的Adapter,讓我和Sarah可以相互交談了(也不知道他會(huì)不會(huì)耍我)適配器模式(Adapter)概述適配器模式(別名:包裝器Wrapper)將一個(gè)類的接口轉(zhuǎn)換成客戶希望的另外一個(gè)接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些類可以一起工作。適配器模式屬于結(jié)構(gòu)型設(shè)計(jì)模式適配器模式的角色模式的結(jié)構(gòu)中包括三種角色:目標(biāo)(Target)被適配者(Adaptee)適配器(Adapter)基于
2、類的Adapter模式基于類的Adapter模式的一般結(jié)構(gòu)如下:Adaptee類為Adapter的父類,Adaptee類為適配源,適配目標(biāo)(接口)也是Adapter的父類;基于類的Adapter模式比較適合應(yīng)用于Adapter想修改Adaptee的部分方法的情況?;陬惖腁dapter模式基于對象的Adapter模式基于對象的Adapter模式的一般結(jié)構(gòu)如下:Adaptee類對象為Adapter所依賴,適配目標(biāo)(接口)是Adapter的父類;基于對象的Adapter模式比較適合應(yīng)用于Adapter想為Adaptee添加新的方法的情況。但在Adaptee類的方法與A
3、dapter類的方法不同名而實(shí)現(xiàn)相同功能的情況下,我們一般也使用基于對象的Adapter模式,基于對象的Adapter模式類適配器和對象適配器比較對于類適配器用一個(gè)具體的Adapter類對Adaptee和Target進(jìn)行匹配。結(jié)果是當(dāng)我們想要匹配一個(gè)類以及所有它的子類時(shí),類Adapter將不能勝任工作。使得Adapter可以重定義Adaptee的部分行為,因?yàn)锳dapter是Adaptee的一個(gè)子類。僅僅引入了一個(gè)對象,并不需要額外的對Adaptee的引用。類適配器和對象適配器比較對于對象適配器允許一個(gè)Adapter與多個(gè)Adaptee—即Adaptee本身以及它
4、的所有子類(如果有子類的話)同時(shí)工作。Adapter也可以一次給所有的Adaptee添加功能。使得重定義Adaptee的行為比較困難。這就需要生成Adaptee的子類并且使得Adapter引用這個(gè)子類而不是引用Adaptee本身。適配器模式示例1.目標(biāo)(Target):ThreeElectricOutlet.javapublicinterfaceThreeElectricOutlet{publicabstractvoidconnectElectricCurrent();}2.被適配者(Adaptee):TwoElectricOutlet.javapublicint
5、erfaceTwoElectricOutlet{publicabstractvoidconnectElectricCurrent();}適配器模式示例3.適配器(Adapter)TreeElectricAdapter.javapublicclassTreeElectricAdapterimplementsThreeElectricOutlet{//對被適配者(Adaptee)的引用(實(shí)際上是一種包裝)TwoElectricOutletoutlet;TreeElectricAdapter(TwoElectricOutletoutlet){this.outlet=ou
6、tlet;}publicvoidconnectElectricCurrent(){outlet.connectElectricCurrent();}}適配器模式示例4.應(yīng)用Application.java_2//Wash類實(shí)現(xiàn)了ThreeElectricOutlet接口classWashimplementsThreeElectricOutlet{Stringname;Wash(){name="黃河洗衣機(jī)";}Wash(Strings){name=s;}publicvoidconnectElectricCurrent(){turnOn();}publicvoidtu
7、rnOn(){System.out.println(name+"開始洗衣物。");}}適配器模式示例應(yīng)用Application.java_3//TV類實(shí)現(xiàn)了TwoElectricOutlet接口classTVimplementsTwoElectricOutlet{Stringname;TV(){name="長江電視機(jī)";}TV(Strings){name=s;}publicvoidconnectElectricCurrent(){turnOn();}publicvoidturnOn(){System.out.println(name+"開始播放節(jié)目。");}}適配
8、器模式示例