java 設(shè)計(jì)模式之適配器模式的詳解
java 設(shè)計(jì)模式之適配器模式的詳解
前言:
適配器模式(Adapter Pattern)又叫做變壓器模式,也叫做包裝模式。包裝模式還包括裝飾模式。
在計(jì)算機(jī)編程中,適配器模式(有時(shí)候也稱包裝樣式或者包裝)將一個(gè)類的接口適配成用戶所期待的。
一個(gè)適配允許通常因?yàn)榻涌诓患嫒荻荒茉谝黄鸸ぷ鞯念惞ぷ髟谝黄?,做法是將類自己的接口包裹在一個(gè)已存在的類中。
UML類圖:
具體代碼:
public class Client { public static void main(String[] args) { Adaptee adaptee = new Adaptee(); Adapter adapter = new Adapter(adaptee); adapter.request(); } } public interface Target { void request(); } public class Adaptee { void adapteeRequest() { System.out.println("本類"); } } public class Adapter implements Target { Adapter(Adaptee adaptee) { this.adaptee = adaptee; } private Adaptee adaptee; @Override public void request() { System.out.println("適配類"); adaptee.adapteeRequest(); } }
舉例說明:
此模式日常的例子,最常見的就是各種各樣的轉(zhuǎn)接口,Mac本連投影儀,一般都是需要轉(zhuǎn)接口轉(zhuǎn)接一下的,這就是適配器模式。
在實(shí)際開發(fā)的例子中,現(xiàn)在系統(tǒng)都是迭代開發(fā)的,一步步累計(jì),出現(xiàn)的情況就是,同樣的功能可能有兩個(gè)或多個(gè)不同的接口,
有的需要調(diào)用之前的,有的調(diào)用后來的,都亂掉了,那就需要加一層適配器,把兩個(gè)新舊的兼容起來。
適用場(chǎng)景:
你想使用一個(gè)已經(jīng)存在的類,而它的接口不符合你的需求。
你想創(chuàng)建一個(gè)可以復(fù)用的類,該類可以與其他不相關(guān)的類或不可預(yù)見的類(即那些接口可能不一定兼容的類)協(xié)同工作。
你想使用一些已經(jīng)存在的子類,但是不可能對(duì)每一個(gè)都進(jìn)行子類化以匹配它們的接口。對(duì)象適配器可以適配它的父類接口
優(yōu)缺點(diǎn):
優(yōu)點(diǎn):
更好的復(fù)用性和擴(kuò)展性
缺點(diǎn):
很多的適配器結(jié)合起來,會(huì)使系統(tǒng)過于過亂,不容易把握。
總結(jié):適配器模式相對(duì)簡(jiǎn)單,總結(jié)起來就是兩個(gè)字“兼容”,這就是這種模式的精髓,當(dāng)然系統(tǒng)不需要兼容更好。
感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
相關(guān)文章
基于Spring Mvc實(shí)現(xiàn)的Excel文件上傳下載示例
本篇文章主要介紹了基于Spring Mvc實(shí)現(xiàn)的Excel文件上傳下載示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-02-02Java中實(shí)現(xiàn)代碼優(yōu)化的技巧分享
這篇文章主要跟大家談?wù)剝?yōu)化這個(gè)話題,那么我們一起聊聊Java中如何實(shí)現(xiàn)代碼優(yōu)化這個(gè)問題,小編這里有幾個(gè)實(shí)用的小技巧分享給大家,需要的可以參考一下2022-08-08Jax-rs規(guī)范REST接口文件上傳代碼實(shí)例
這篇文章主要介紹了Jax-rs規(guī)范REST接口文件上傳代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09使用Java把文本內(nèi)容轉(zhuǎn)換成網(wǎng)頁的實(shí)現(xiàn)方法分享
這篇文章主要介紹了使用Java把文本內(nèi)容轉(zhuǎn)換成網(wǎng)頁的實(shí)現(xiàn)方法分享,利用到了Java中的文件io包,需要的朋友可以參考下2015-11-11