Java設計模式之適配器模式和橋接模式詳細解析

2020-12-16 金銘鼎IT教育
Java

前言

我們學習了在Java中如何創建型模式的建造者模式和原型模式。現在則來學習下結構型模式的適配器模式和橋接模式。

適配器模式

適配器

簡介適配器模式是作為兩個不兼容的接口之間的橋梁。這種類型的設計模式屬於結構型模式,它結合了兩個獨立接口的功能。 簡單的來說就是通過某個接口將不兼容的兩個類進行兼容,俗稱轉換器。 生活比較典型的例子是電器的電壓,美國的電壓是110V左右, 而中國的電壓普片是220V,如果我們想用美國或日本的電器,則需要一個轉換器,將110V轉換成220V。還有一個很典型例子就是曾經的萬能充,基本可以充各種手機的電池。 這裡我們用一個簡單的示例來進行說明。 某個視頻播放器,只能播放MP4格式的視頻,但是主流的視頻格式除了MP4,還有AVI、RVMB等,這時就有個軟體,格式工廠用於對視頻格式的轉換(適配器),從而進行播放視頻。這時我們就可以使用適配器模式來進行完成該代碼的編寫。 適配器模式主要有兩種類型,一種是類適配器模式,主要通過繼承來實現適配器功能;一種是對象適配器模式,通過組合來實現適配器功能。首先是類適配器模式,它需要完成一下步驟:建立MP4、AVI、RVMB視頻格式的接口;建立一個視頻播放器的類實現MP4視頻格式的類;編寫一個格式工廠類,將AVI、RVMB等格式的視頻文件轉換成MP4格式的文件。播放這些視頻。那麼代碼如下:代碼示例:

interface Mp4{ void playMp4(); } interface Avi{ void playAvi(); } interface Rvmb{ void playRvmb(); } class VideoPlayer implements Mp4{ @Override public void playMp4() { System.out.println("播放Mp4格式的視頻文件."); } } class FormatFactory extends VideoPlayer implements Avi{ @Override public void playAvi() { //轉換成MP4格式的視頻 playMp4(); } } public static void main(String[] args) { Mp4 mp4=new VideoPlayer(); mp4.playMp4(); Avi avi=new FormatFactory(); avi.playAvi(); }

運行結果:

播放Mp4格式的視頻文件. 播放Mp4格式的視頻文件.

通過上述代碼以及運行結果,我們可以得到想要的結果了,如果還有新增的視頻格式,也需要使用該視頻播放器播放的話,只需在增加一個接口以及格式工廠類就可以了。對象適配器模式

對象適配器

通過組合來實現適配器功能。 所以這裡我們只需將格式工廠中繼承改為創建對象即可。 更改之後的代碼如下:代碼示例

class FormatFactory2 implements Rvmb{private Mp4 mp4; public FormatFactory2(Mp4 mp4) { this.mp4=mp4; } @Override public void playRvmb() { mp4.playMp4(); } }

public static void main(String[] args) { Rvmb rvmb=new FormatFactory2(new VideoPlayer()); rvmb.playRvmb(); }

運行結果:播放Mp4格式的視頻文件. 這兩種適配器模式中,都實現了該功能,不過在這裡推薦使用對象適配器模式,相比類適配器模式,它更加靈活,也符合設計原則中的合成復用原則: 儘量使用合成/聚合的方式,而不是使用繼承。適配器模式的優點: 提升了類的復用和靈活度。適配器模式的缺點: 使用過多,系統會比較雜亂,難以把握。注意事項: 適配器不是在詳細設計時添加的,而是解決正在服役的項目的問題。

橋接模式

橋接模式

簡介

橋接是用於把抽象化與實現化解耦,使得二者可以獨立變化。這種類型的設計模式屬於結構型模式,它通過提供抽象化和實現化之間的橋接結構,來實現二者的解耦。 字面的意思解讀就是通過一個中間的橋梁對兩邊的東西進行關聯起來,但是關聯的兩者之間又不相互影響。對這個印象比較深的是<大話設計模式>中的手機品牌和手機軟體,手機有很多品牌,市場有很多軟體,每個手機裝的軟體又各不相同,手機品牌包含軟體,但是軟體並不是手機的一部分,它們是聚合關係。如果A品牌手機裝了a,b軟體,B品牌手機裝了b,c軟體,如果A品牌手機需要新安裝一個c軟體,那麼它只需添加該軟體即可,無需知道該軟體是如何生產的。相同的,如果新增了一個C品牌手機,那麼它也只需安裝所需的a、b或c軟體即可。 好了,廢話不在多說,依舊用一個示例來進行說明。 市面上有很多種筆,比如鉛筆、黑色的原子筆和紅色的原子筆等等, 也有很多種類型的紙,比如考試的卷子用的紙,報紙用的紙等等。一般來說,報紙上的字顏色是黑色的,這裡我們就用黑色的原子筆來進行書寫,考試卷子上的打分字顏色是紅色的,這裡我們就用紅色的原子筆來進行書寫。筆類和紙類相互獨立,但是在紙上寫字又將它們關聯起來,這裡我們就可以使用橋接模式。實現步驟如下:定義一個筆類的接口,有寫的這個方法;定義紅筆和黑筆的類,實現筆類的接口;定義一個紙類的抽象類,設置筆的種類,並需要實現被寫的方法;定義卷子紙和新聞紙類,繼承紙類並實現該方法;進行書寫。代碼示例

interface Pen{void write();}

class RedPen implements Pen{@Override public void write() { System.out.println("紅色的字"); }}

class BlackPen implements Pen{@Override public void write() { System.out.println("黑色的字"); }}

abstract class Paper{protected Pen pen; void setPen(Pen pen){ this.pen=pen; } abstract void writing();}

class ExaminationPaper extends Paper{@Override void writing() { pen.write(); }}

class NewsPaper extends Paper{@Override void writing() { pen.write(); }}

public static void main(String[] args) {Paper paper=new ExaminationPaper(); paper.setPen(new RedPen()); paper.writing(); Paper paper2=new NewsPaper(); paper2.setPen(new BlackPen()); paper2.writing(); }

運行結果

紅色的字 黑色的字

從上述結果中我們可以得出我們想要的結果。如果新增一個筆類或者一個紙類,那麼只需新增相應的接口和實現即可,並不會因為結構化改變而相互直接影響。

橋接模式的優點:

1、抽象和實現的分離,實現了解耦; 2、提升的擴展能力。

橋接模式的缺點:

會使系統看起複雜,對新手不友好,沒有一定的抽象進行設計能力難以理解。

使用場景:

一個類存在兩個獨立變化的維度,且這兩個維度都需要進行擴展。

相關焦點

  • java設計模式之適配器模式
    適配器模式(Adapter Pattern)是作為兩個不兼容的接口之間的橋梁。這種類型的設計模式屬於結構型模式,它結合了兩個獨立接口的功能。這種模式涉及到一個單一的類,該類負責加入獨立的或不兼容的接口功能。
  • 設計模式之適配器模式(Java實現)
    設計模式之適配器模式(Java實現)小王正在和美女聊天,突然接到領導電話,要讓會議室投影匯報項目情況,只能暫時離開美女去了會議室,到了會議室,發現投影儀的接口和自己電腦中的接口不匹配這個在設計模式中就是適配器模式。適配器模式(Adapter Pattern):將一個類的接口變換成客戶端所期待的另一個接口,從而是原本因為接口不匹配而無法在一起工作的兩個類能夠在一起工作。適配器模式的通用類圖如下:
  • 常用的設計模式之橋接模式(Java代碼實現)
    這對我們來說這些手機也太多了,竟然有12個,最主要的是手機品牌和內存是放在一起的。現在有這樣一種機制,手機牌品商是一個公司,做手機內存的是一個公司,想要做什麼手機我們只需要讓其兩者搭配起來即可。有點類似於全球貿易分工明確的思想,這就是橋接模式,把兩個不同維度的東西橋接起來。一、認識橋接模式1、概念將抽象部分與它實現部分分離,使它們都可以獨立地變化。
  • 橋接模式
    這種類型的設計模式屬於結構型模式,它通過提供抽象化和實現化之間的橋接結構,來實現二者的解耦。這種模式涉及到一個作為橋接的接口,使得實體類的功能獨立於接口實現類。這兩種類型的類可被結構化改變而互不影響。我們通過下面的實例來演示橋接模式(Bridge Pattern)的用法。其中,可以使用相同的抽象類方法但是不同的橋接實現類,來畫出不同顏色的圓。
  • 深度好文:設計模式之——適配器模式
    今天給大家分享一下設計模式中的「適配器模式」。基本介紹適配器模式屬於「結構型模式」的一種。適配器模式的工作原理就是:用戶調用適配器轉換出來的接口,適配器在調用被適配類的相關接口,從而完成適配。通過不同的實現方式,我們可以將其分成三類:類適配器模式,對象適配器模式,接口適配器模式。
  • 精讀《設計模式 - Bridge 橋接模式》
    Bridge(橋接模式)Bridge(橋接模式)屬於結構型模式,是一種解決繼承後靈活拓展的方案。意圖:將抽象部分與它的實現部分分離,使它們可以獨立地變化。橋接模式比較難理解,我會一步步還原該設計模式的思考,讓你體會這個設計模式是如何一步一步被提煉出來的。舉例子如果看不懂上面的意圖介紹,沒有關係,設計模式需要在日常工作裡用起來,結合例子可以加深你的理解,下面我準備了三個例子,讓你體會什麼場景下會用到這種設計模式。
  • 「原創」讓設計模式飛一會兒|⑦適配器模式
    本文轉載自【微信公眾號:java進階架構師,ID:java_jiagoushi】經微信公眾號授權轉載,如需轉載與原文作者聯繫大家好,我是高冷就是範兒,好久不見。過了一個光棍節,人相當懶散,一時沒啥靈感,文章更新速度較慢,抱歉。今天我們繼續來聊設計模式這個話題。
  • java 23種設計模式及其在spring,tomcat,jdk中的應用
    設計模式是前人(一般都是大師)對程序設計經驗的總結,學習並應用設計模式可以使我們開發的項目更加規範、便於擴展和維護,這大概是為什麼設計模式基本是面試必問的原因吧!本文主要內容有四部分:設計原則、設計模式分類、23種設計模式、設計模式應用。設計模式雖多,但重要的、主流開源框架應用較多的往往就那幾個。
  • 大神詳解,這麼詳細的Java設計模式不收藏可惜了
    為什麼再看一遍設計模式,主要有幾個原因:***,很多優秀的源碼基本都使用了設計模式,明確設計模式能夠更好的看源碼。第二,很多中間件設計理念也是基於設計模式的,還有其他的語言,都有自己的設計優秀實踐。對於我來說,設計模式始於java,不止於java。第三,有了這種規範,可以更好的和他人溝通,言簡意賅。
  • 程式設計師必備設計模式之適配器模式
    昨天是1024程式設計師節,特地停更一天,今天我們來講一個簡單的設計模式,適配器模式。適配器模式,它是一個結構性的設計模式。在我們的生活中,總是有各種各樣的適配器,最常見的,就是你去國外旅遊的時候,通常需要購買轉接插座,因為國內的插座與國外的標準不同,接口不同,你需要一個轉換器。當你使用這個轉換器的時候,你不用關心裏面是如何工作的,只需要關心插頭從什麼標準轉成什麼標準,而不需要關心轉化器如何實現,這便是適配器。
  • Java-今天學學適配器(Adaptor)設計模式
    1.適配器(Adaptor)設計模式1.1.生活中的適配電腦電源適配器:將電腦不能直接使用的220v交流電, 轉換 成電腦可以直接使用的20v直流電;1.2.適配器模式>適配器,主要就是將原本不能或者不方便直接使用的東西,轉換成可以直接或者方便使用的東西;1.3.Java中的適配在Java中,根據適配對象的不同,可以將適配器分為三類:類的適配;接口的適配;對象的適配;
  • 從零開始學Android架構(一)——什麼是設計模式?
    》結構型了解了創建型的設計模式,是不是對設計模式有了一點感覺了,創建型的設計模式還是比較簡單的,只需要我們在new一個對象的時候,考慮當前場景是否可以用創建型設計模式來進行改進和優化就行了,相比而言,結構型的設計模式就是屬於進階的了,他需要我們將多個對象進行組合,組織成更大的結構,並能獲得新的功能,結構性的設計模式主要有代理、適配器、橋接、裝飾、外觀、享元、組合
  • 設計模式結構性:適配器模式(AdapterPattern)
    適配器模式(Adapter Pattern)是作為兩個不兼容的接口之間的橋梁。這種類型的設計模式屬於結構型模式,它結合了兩個獨立接口的功能。 這種模式涉及到一個單一的類,該類負責加入獨立的或不兼容的接口功能。舉個真實的例子,讀卡器是作為內存卡和筆記本之間的適配器。
  • 大話設計模式之愛你一萬年:第一章 設計模式基本概念:2.GoF的23種設計模式的分類和功能
    學習說明:本篇的知識,只需要有一個大概的了解即可,在後面的章節中每個設計模式都會有詳細的介紹。
  • VMware 三種網絡連接模式的詳細介紹和區別
    VMware0 橋接模式VMware橋接模式,也就是將虛擬機的虛擬網絡適配器與主機的物理網絡適配器進行交接,虛擬機中的虛擬網絡適配器可通過主機中的物理網絡適配器直接訪問到外部網絡(例如圖中所示的區域網和Internet,下同)。簡而言之,這就好像在上圖所示的區域網中添加了一臺新的、獨立的計算機一樣。
  • 設計模式的解釋:使用代碼示例的適配器模式
    設計模式提供了一種可靠和簡單的方法來遵循經過驗證的設計原則,並編寫結構良好且可維護的代碼。適配器模式是面向對象軟體開發中流行和常用的模式之一。它遵循Robert C. Martin的依賴倒置原則,並使您可以重用現有的類,即使它不實現預期的接口。
  • Java設計模式:三大類工廠方法模式
    GOF在《設計模式》一書中將工廠模式分為兩類:工廠方法模式(Factory Method)與抽象工廠模式(Abstract Factory)。將簡單工廠模式(Simple Factory)看為工廠方法模式的一種特例,兩者歸為一類。  二、簡單工廠模式  簡單工廠模式又稱靜態工廠方法模式。重命名上就可以看出這個模式一定很簡單。
  • 從Java類庫看設計模式
    其實設計模式的思想現在應用的如此廣泛,無論在什麼樣的設計中,只要稍微大一點的設計,都可以找到很多很多設計模式的蹤跡,或者說都不可避免的用到設計模式。下面所講的設計模式,大部分都是GOF的那部經典中出現過的23個模式,然而,還有一些,比如MVC,並不屬於那裡。
  • GoF 的 23 種設計模式的分類和功能
    結構型模式:用於描述如何將類或對象按某種布局組成更大的結構,GoF 中提供了代理、適配器、橋接、裝飾、外觀、享元、組合等 7 種結構型模式。行為型模式:用於描述類或對象之間怎樣相互協作共同完成單個對象都無法單獨完成的任務,以及怎樣分配職責。
  • 重學Java 設計模式:實戰外觀模式
    一般情況下對於外觀模式的使用通常是用在複雜或多個接口進行包裝統一對外提供服務上,此種使用方式也相對簡單在我們平常的業務開發中也是最常用的。你可能經常聽到把這兩個接口包裝一下,但在本例子中我們把這種設計思路放到中間件層,讓服務變得可以統一控制。1.