java设计模式6--适配器模式(Adapter )
本文地址:http://www.cnblogs.com/archimedes/p/java-adapter-pattern.html,轉(zhuǎn)載請(qǐng)注明源地址。
適配器模式(別名:包裝器)
將一個(gè)類(lèi)的接口轉(zhuǎn)換成客戶希望的另外一個(gè)接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些類(lèi)可以一起工作。
概述
適配器模式是將一個(gè)類(lèi)的接口(被適配者)轉(zhuǎn)換成客戶希望的另外一個(gè)接口(目標(biāo))的成熟模式,該模式中涉及有目標(biāo)、被適配者和適配器。適配器模式的關(guān)鍵是建立一個(gè)適配器,這個(gè)適配器實(shí)現(xiàn)了目標(biāo)接口并包含有被適配者的引用。
適用性
1.你想使用一個(gè)已經(jīng)存在的類(lèi),而它的接口不符合你的需求。
2.你想創(chuàng)建一個(gè)可以復(fù)用的類(lèi),該類(lèi)可以與其他不相關(guān)的類(lèi)或不可預(yù)見(jiàn)的類(lèi)(即那些接口可能不一定兼容的類(lèi))協(xié)同工作。
3.(僅適用于對(duì)象Adapter)你想使用一些已經(jīng)存在的子類(lèi),但是不可能對(duì)每一個(gè)都進(jìn)行子類(lèi)化以匹配它們的接口。對(duì)象適配器可以適配它的父類(lèi)接口。
參與者
1.Target 定義Client使用的與特定領(lǐng)域相關(guān)的接口。
2.Client 與符合Target接口的對(duì)象協(xié)同。
3.Adaptee 定義一個(gè)已經(jīng)存在的接口,這個(gè)接口需要適配。
4.Adapter 對(duì)Adaptee的接口與Target接口進(jìn)行適配
適配器模式的結(jié)構(gòu)與使用
模式的結(jié)構(gòu)中包括三種角色:
-
目標(biāo)(Target)
-
被適配者(Adaptee)
-
適配器(Adapter)?
模式的UML類(lèi)圖:
實(shí)戰(zhàn)部分
用戶已有一個(gè)兩相的插座,但最近用戶又有了一個(gè)新的三相插座。用戶現(xiàn)在已經(jīng)有一臺(tái)洗衣機(jī)和一臺(tái)電視機(jī),洗衣機(jī)按著三相插座的標(biāo)準(zhǔn)配有三相插頭,而電視機(jī)按著兩相插座的標(biāo)準(zhǔn)配有兩相插頭。現(xiàn)在用戶想用新的三相插座來(lái)使用洗衣機(jī)和電視機(jī)。
1.目標(biāo)(Target) :?ThreeElectricOutlet.java
public interface ThreeElectricOutlet{public abstract void connectElectricCurrent(); }2.被適配者(Adaptee):?TwoElectricOutlet.java
public interface TwoElectricOutlet{public abstract void connectElectricCurrent(); }3.適配器(Adapter):?TreeElectricAdapter.java
public class TreeElectricAdapter implements ThreeElectricOutlet{TwoElectricOutlet outlet;TreeElectricAdapter(TwoElectricOutlet outlet){this.outlet=outlet;}public void connectElectricCurrent(){outlet.connectElectricCurrent();} }4.應(yīng)用?Application.java_1
public class Application{public static void main(String args[]){ThreeElectricOutlet outlet; Wash wash=new Wash(); outlet=wash; System.out.println("使用三相插座接通電流:");outlet.connectElectricCurrent(); TV tv=new TV(); TreeElectricAdapter adapter=new TreeElectricAdapter(tv);outlet=adapter; System.out.println("使用三相插座接通電流:");outlet.connectElectricCurrent(); } }4.應(yīng)用?Application.java_2
class Wash implements ThreeElectricOutlet{ String name;Wash(){name="黃河洗衣機(jī)";}Wash(String s){name=s;}public void connectElectricCurrent(){turnOn();}public void turnOn(){System.out.println(name+"開(kāi)始洗衣物。");} }4.應(yīng)用?Application.java_3
class TV implements TwoElectricOutlet{ String name;TV(){name="長(zhǎng)江電視機(jī)";}TV(String s){name=s;}public void connectElectricCurrent(){turnOn();}public void turnOn(){System.out.println(name+"開(kāi)始播放節(jié)目。");} }適配器模式的優(yōu)點(diǎn)
?目標(biāo)(Target)和被適配者(Adaptee)是完全解耦的關(guān)系。
?適配器模式滿足“開(kāi)-閉原則”。當(dāng)添加一個(gè)實(shí)現(xiàn)Adaptee接口的新類(lèi)時(shí),不必修改Adapter,Adapter就能對(duì)這個(gè)新類(lèi)的實(shí)例進(jìn)行適配。
您還可能感興趣:
java設(shè)計(jì)模式系列:
java設(shè)計(jì)模式5--原型模式(Prototype)?
java設(shè)計(jì)模式4--建造者模式(Builder)
java設(shè)計(jì)模式3--單例模式(Singleton)
java設(shè)計(jì)模式2--抽象工廠模式(Abstract Factory)
java設(shè)計(jì)模式1--工廠方法模式(Factory Method)?
java設(shè)計(jì)模式0--設(shè)計(jì)模式簡(jiǎn)介
總結(jié)
以上是生活随笔為你收集整理的java设计模式6--适配器模式(Adapter )的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: java设计模式5--原型模式(Prot
- 下一篇: ASP.NET MVC案例教程(基于AS