Java設(shè)計(jì)模式以虹貓藍(lán)兔的故事講解橋接模式
模式: 橋接模式
案例: 藍(lán)兔宮主買裙子
什么是橋接模式
橋接(Bridge)模式的定義如下: 將抽象與實(shí)現(xiàn)分離,使它們可以獨(dú)立變化。它是用組合關(guān)系代替繼承關(guān)系來實(shí)現(xiàn),從而降低了抽象和實(shí)現(xiàn)這兩個(gè)可變維度的耦合度。
優(yōu)點(diǎn)
1、抽象與實(shí)現(xiàn)分離,擴(kuò)展能力強(qiáng)
2、符合開閉原則
3、符合合成復(fù)用原則
4、其實(shí)現(xiàn)細(xì)節(jié)對(duì)客戶透明
缺點(diǎn)
由于聚合關(guān)系建立在抽象層,要求開發(fā)者針對(duì)抽象化進(jìn)行設(shè)計(jì)與編程,能正確地識(shí)別出系統(tǒng)中兩個(gè)獨(dú)立變化的維度,這增加了系統(tǒng)的理解與設(shè)計(jì)難度。
知識(shí)點(diǎn)
可以將抽象化部分與實(shí)現(xiàn)化部分分開,取消二者的繼承關(guān)系,改用組合關(guān)系。
橋接模式實(shí)現(xiàn)
案例: 藍(lán)兔宮主買裙子
裙子分兩個(gè)維度,分別是顏色和樣式。
顏色有黃色和紅色;
樣式分長(zhǎng)裙和短裙;
抽象化(Abstraction)角色: 顏色
擴(kuò)展抽象化(Refined Abstraction)角色: 黃色和紅色
實(shí)現(xiàn)化(Implementor)角色: 樣式
具體實(shí)現(xiàn)化(Concrete Implementor)角色: 長(zhǎng)裙和短裙
顏色
顏色接口,聲明一個(gè)show()抽象方法
public interface Color { void show(); }
黃色
黃色類并實(shí)現(xiàn)顏色接口
public class ColorYellow implements Color { @Override public void show() { System.out.println("黃色的"); } }
紅色
紅色類并實(shí)現(xiàn)顏色接口
public class ColorRed implements Color { @Override public void show() { System.out.println("紅色的"); } }
裙子
裙子類,聲明一個(gè)顏色屬性和一個(gè)抽象方法
abstract class Qun { protected Color color; protected Qun() { } protected Qun(Color color) { this.color = color; } public abstract void shows(); }
長(zhǎng)裙
繼承裙子類,并實(shí)現(xiàn)抽象方法
public class QunChang extends Qun { protected QunChang() { } protected QunChang(Color color) { super(color); } @Override public void shows() { System.out.println("長(zhǎng)裙"); color.show(); } }
短裙
繼承裙子類,并實(shí)現(xiàn)抽象方法
public class QunDuan extends Qun { protected QunDuan() { } protected QunDuan(Color color) { super(color); } @Override public void shows() { System.out.println("短裙"); color.show(); } }
測(cè)試
new一個(gè)紅色對(duì)象作為參數(shù)傳給長(zhǎng)裙。
public class Demo { public static void main(String[] args) { Color color = new ColorRed(); Qun qun = new QunChang(color); qun.shows(); } }
總結(jié)
當(dāng)一個(gè)類內(nèi)部具備兩種或多種變化維度時(shí),使用橋接模式可以解耦這些變化的維度,使高層代碼架構(gòu)穩(wěn)定。
到此這篇關(guān)于Java設(shè)計(jì)模式以虹貓藍(lán)兔的故事講解橋接模式的文章就介紹到這了,更多相關(guān)Java橋接模式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
javaweb判斷當(dāng)前請(qǐng)求是否為移動(dòng)設(shè)備訪問的方法
這篇文章主要為大家詳細(xì)介紹了javaweb判斷當(dāng)前請(qǐng)求是否為移動(dòng)設(shè)備訪問的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05java防盜鏈在報(bào)表中的應(yīng)用實(shí)例(推薦)
下面小編就為大家?guī)硪黄猨ava防盜鏈在報(bào)表中的應(yīng)用實(shí)例(推薦)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-09-09Java中的關(guān)鍵字_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
關(guān)鍵字也稱為保留字,是指Java語言中規(guī)定了特定含義的標(biāo)示符。對(duì)于保留字,用戶只能按照系統(tǒng)規(guī)定的方式使用,不能自行定義2017-04-04Kotlin基礎(chǔ)教程之?dāng)?shù)據(jù)類型
這篇文章主要介紹了Kotlin基礎(chǔ)教程之?dāng)?shù)據(jù)類型的相關(guān)資料,需要的朋友可以參考下2017-05-05解決SpringBoot框架因post數(shù)據(jù)量過大沒反應(yīng)問題(踩坑)
這篇文章主要介紹了解決SpringBoot框架因post數(shù)據(jù)量過大沒反應(yīng)問題(踩坑),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-09-09Java?Ribbon與openfeign區(qū)別和用法講解
Ribbon是基于Netflix?Ribbon實(shí)現(xiàn)的一套客戶端負(fù)載均衡的工具,主要功能是提供客戶端的軟件負(fù)載均衡算法和服務(wù)調(diào)用。openfeign對(duì)Feign進(jìn)行了增強(qiáng),使其支持Spring MVC注解,另外還整合了Ribbon和Nacos,從而使得Feign的使用更加方便2022-08-08