java设计模式——adapter模式
描述
將現(xiàn)有的模塊接口轉(zhuǎn)換一下,以適配新的接口需求,用于填補(bǔ)“現(xiàn)有的程序“和“所需的程序“之間差異。通常也會(huì)被稱為:wrapper(包裝)模式。
模式中的角色
adapter模式中有以下主要角色:
1. target(對(duì)象)
該角色負(fù)責(zé)定義所需的方法,描述需要adapter轉(zhuǎn)換之后的接口。
2. client(請(qǐng)求者)
轉(zhuǎn)換之后的接口使用者,client通過(guò)adapter訪問(wèn)已有的舊接口。
3. adaptee(被適配者)
已經(jīng)存在的舊接口實(shí)現(xiàn)者,提供老舊的接口實(shí)現(xiàn),是需要adapter轉(zhuǎn)換的對(duì)象。
4. adapter(適配者)
是本模式的核心,用于將現(xiàn)有的接口轉(zhuǎn)換成需要的接口。
模式分類
在實(shí)際操作中,通常adapter模式有以下兩種形式:
為了方便描述,這里我們舉一個(gè)實(shí)際的例子,這里的例子就是廣告條幅展示的例子?,F(xiàn)有的廣告條幅展示形式有帶有括號(hào)的展示方式:
(這里是廣告的內(nèi)容)
還有帶有星號(hào)的形式:
*這里是廣告的內(nèi)容*
這是目前已有的兩種形式。現(xiàn)在有一個(gè)新的電子廣告展示器,可以展示加粗和不加粗的字體廣告,加粗的形式就是使用星號(hào)將廣告的內(nèi)容包含起來(lái),就像上面的形式;不加粗的就是使用括號(hào)將廣告內(nèi)容包含起來(lái),也是和上面的一樣。
現(xiàn)在的做法就是做一個(gè)適配器,使用這個(gè)適配器adapter將老的廣告展示轉(zhuǎn)換成新的廣告展示形式
這個(gè)例子中涉及的模式角色有:
- target——新的廣告展示形式
- client——廣告投遞商
- adaptee——舊的廣告展示牌
- adapter——適配器,需要實(shí)現(xiàn)的
涉及到的java類有:
- IPrint——這是一個(gè)接口,對(duì)應(yīng)target
- Main——這是主類,對(duì)應(yīng)client
- Banner——這是舊的廣告展示實(shí)現(xiàn),對(duì)應(yīng)adaptee
- PrintBanner——這是廣告展示轉(zhuǎn)換器,對(duì)應(yīng)adapter
類適配器模式
類適配器模式使用類繼承和接口實(shí)現(xiàn)的方式實(shí)現(xiàn),類圖描述如下:
代碼如下:
IPrint
/************************************************************************* > File Name: IPrint.java > Author: CreateChance > Mail: createchance@163.com > Created Time: Fri Mar 2 11:29:26 2018************************************************************************/ public interface IPrint { void printWeak(); void printStrong(); }Banner
/*************************************************************************> File Name: Banner.java> Author: CreateChance> Mail: createchance@163.com > Created Time: Fri Mar 2 11:30:10 2018************************************************************************/ public class Banner {private String name;public Banner(String name) {this.name = name;}public void showWithParen() {System.out.println("(" + name + ")");}public void showWithAster() {System.out.println("*" + name + "*");} }PrintBanner
/*************************************************************************> File Name: PrintBanner.java> Author: CreateChance> Mail: createchance@163.com > Created Time: Fri Mar 2 11:32:59 2018************************************************************************/ public class PrintBanner extends Banner implements IPrint {public PrintBanner(String name) {super(name);}@Overridepublic void printWeak() {super.showWithParen();}@Overridepublic void printStrong() {super.showWithAster();} }Main
/************************************************************************* > File Name: Main.java > Author: CreateChance > Mail: createchance@163.com > Created Time: Fri Mar 2 11:35:06 2018************************************************************************/ public class Main { public static void main(String argv[]) { // 這里我們使用IPrint類型,就是為了面向接口,而不是面向具體實(shí)現(xiàn)類。 // 因?yàn)镸ain作為一個(gè)client對(duì)象,只需要直接接口定義就行了,不需要知道實(shí)現(xiàn) IPrint printer = new PrintBanner("This is banner."); printer.printWeak(); printer.printStrong(); } }對(duì)象適配器模式
和類適配器模式不同的是,對(duì)象適配器模式使用的組合模式實(shí)現(xiàn),也就是委托。將自己需要完成的一些工作,委托給別的對(duì)象完成。上面的類適配器模式中,我們將PrintBanner類繼承自Banner來(lái)獲得Banner的能力,其實(shí)我們還可以通過(guò)委托來(lái)實(shí)現(xiàn)。具體的做法就是在PrintBanner中加入一個(gè)內(nèi)部字段,類型就是Banner。通過(guò)內(nèi)部持有的Banner對(duì)象來(lái)訪問(wèn)Banner的方法。所做的修改就是將類適配模式中的PrintBanner修改為如下:
/*************************************************************************> File Name: PrintBanner.java> Author: CreateChance> Mail: createchance@163.com > Created Time: Fri Mar 2 11:37:43 2018************************************************************************/ public class PrintBanner implements IPrint {private Banner banner;public PrintBanner(String name) {banner = new Banner(name);}@Overridepublic void printWeak() {banner.showWithParen();}@Overridepublic void printStrong() {banner.showWithAster();} }類圖描述如下:
總結(jié)
以上是生活随笔為你收集整理的java设计模式——adapter模式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 应用密码学(张仕斌)第四章
- 下一篇: Android 开发即时聊天工具 YQ