Java設(shè)計(jì)模式中的橋接模式
模式介紹
- 橋接模式(Bridge模式)是指:將實(shí)現(xiàn)與抽象放在兩個(gè)不同的類(lèi)層次中,使兩個(gè)層次可以獨(dú)立改變。
- 是一種結(jié)構(gòu)型設(shè)計(jì)模式。
- Bridge模式基于類(lèi)的最小設(shè)計(jì)原則,通過(guò)使用封裝、聚合及繼承等行為讓不同的類(lèi)承擔(dān)不同的職責(zé)。它的主要特點(diǎn)是把抽象(Abstraction)與行為實(shí)現(xiàn)(Implementation)分離開(kāi)來(lái),從而可以保持各部分的獨(dú)立性以及應(yīng)對(duì)他們的功能擴(kuò)展。
UML類(lèi)圖

類(lèi)圖說(shuō)明:
- Client類(lèi):橋接模式的調(diào)用者。
- 抽象類(lèi)(Abstraction) :維護(hù)了Implementor /即它的實(shí)現(xiàn)類(lèi)Concretelmplementor…二者是聚合關(guān)系,Abstraction充當(dāng)橋接類(lèi)
- RefinedAbstraction:是Abstraction 抽象類(lèi)的子類(lèi)
- Implementor: 行為實(shí)現(xiàn)類(lèi)的接口
- ConcretelmplementorA/B :行為的具體實(shí)現(xiàn)類(lèi)
- 從UML圖:這里的抽象類(lèi)和接口是聚合的關(guān)系,其實(shí)調(diào)用和被調(diào)用關(guān)系
橋接模式案例
背景介紹: 客戶(hù)端通過(guò)橋接模式,根據(jù)手機(jī)功能和品牌進(jìn)行相應(yīng)功能的輸出

手機(jī)品牌接口類(lèi)及實(shí)現(xiàn)子類(lèi)
public interface Brand {
void open();
void close();
void call();
}public class XiaoMi implements Brand {
@Override
public void open() {
System.out.println("小米手機(jī)開(kāi)機(jī)");
}
@Override
public void close() {
System.out.println("小米手機(jī)關(guān)機(jī)");
}
@Override
public void call() {
System.out.println("小米手機(jī)打電話(huà)");
}
}public class Vivo implements Brand{
@Override
public void open() {
System.out.println("Vivo手機(jī)開(kāi)機(jī)");
}
@Override
public void close() {
System.out.println("Vivo手機(jī)關(guān)機(jī)");
}
@Override
public void call() {
System.out.println("Vivo手機(jī)打電話(huà)");
}
}手機(jī)抽象類(lèi)及實(shí)現(xiàn)子類(lèi)
public abstract class Phone {
private Brand brand;
public Phone(Brand brand) {
this.brand = brand;
}
protected void open(){
this.brand.open();
}
protected void close(){
this.brand.close();
}
protected void call() {
this.brand.call();
}
}public class FoldedPhone extends Phone{
public FoldedPhone(Brand brand) {
super(brand);
}
@Override
protected void open() {
super.open();
System.out.println("折疊樣式手機(jī)");
}
@Override
protected void close() {
super.close();
System.out.println("折疊樣式手機(jī)");
}
@Override
protected void call() {
super.call();
System.out.println("折疊樣式手機(jī)");
}
}public class UpRightPhone extends Phone {
public UpRightPhone(Brand brand) {
super(brand);
}
@Override
protected void open() {
super.open();
System.out.println("直立樣式手機(jī)");
}
@Override
protected void close() {
super.close();
System.out.println("直立樣式手機(jī)");
}
@Override
protected void call() {
super.call();
System.out.println("直立樣式手機(jī)");
}
}客戶(hù)端
public class Client {
public static void main(String[] args) {
Phone foldedPhone = new FoldedPhone(new XiaoMi());
Phone upRightPhone = new UpRightPhone(new Vivo());
foldedPhone.close();
foldedPhone.open();
foldedPhone.call();
System.out.println("===============");
upRightPhone.close();
upRightPhone.open();
upRightPhone.call();
}
}實(shí)現(xiàn)結(jié)果:

橋接模式的注意事項(xiàng)和細(xì)節(jié)
- 實(shí)現(xiàn)了抽象和實(shí)現(xiàn)部分的分離,從而極大的提供了系統(tǒng)的靈活性,讓抽象部分和實(shí)現(xiàn)部分獨(dú)立開(kāi)來(lái),這有助于系統(tǒng)進(jìn)行分層設(shè)計(jì),從而產(chǎn)生更好的結(jié)構(gòu)化系統(tǒng)。
- 對(duì)于系統(tǒng)的高層部分,只需要知道抽象部分和實(shí)現(xiàn)部分的接口就可以了,其它的部分由具體業(yè)務(wù)來(lái)完成。
- 橋接模式替代多層繼承方案,可以減少子類(lèi)的個(gè)數(shù),降低系統(tǒng)的管理和維護(hù)成本。
- 橋接 模式的引入增加了系統(tǒng)的理解和設(shè)計(jì)難度,由于聚合關(guān)聯(lián)關(guān)系建立在抽象層,要求開(kāi)發(fā)者針對(duì)抽象進(jìn)行設(shè)。
- 橋接 模式要求正確識(shí)別出系統(tǒng)中兩個(gè)獨(dú)立變化的維度(抽象、和實(shí)現(xiàn)),因此其使用范圍有-定的局限性,即需要有這樣的應(yīng)用場(chǎng)景。
- 橋接模式其它應(yīng)用場(chǎng)景
對(duì)于那些不希望使用繼承或因?yàn)槎鄬哟卫^承導(dǎo)致系統(tǒng)類(lèi)的個(gè)數(shù)急劇增加的系統(tǒng),橋接模式尤為適用.
常見(jiàn)的應(yīng)用場(chǎng)景
- JDBC驅(qū)動(dòng)程序
- 銀行轉(zhuǎn)賬系統(tǒng)
轉(zhuǎn)賬分類(lèi):網(wǎng)上轉(zhuǎn)賬,柜臺(tái)轉(zhuǎn)賬,AMT轉(zhuǎn)賬
轉(zhuǎn)賬用戶(hù)類(lèi)型:普通用戶(hù),銀卡用戶(hù),金卡用戶(hù)… - 消息管理
消息類(lèi)型:即時(shí)消息,延時(shí)消息
消息分類(lèi):手機(jī)短信,郵件消息,QQ消息…
到此這篇關(guān)于Java設(shè)計(jì)模式中的橋接模式的文章就介紹到這了,更多相關(guān)Java橋接模式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
關(guān)于Springboot在新增和修改下上傳圖片并顯示的問(wèn)題
這篇文章主要介紹了關(guān)于Springboot在新增和修改下上傳圖片并顯示的問(wèn)題及解決方法,在這里 springboot中已經(jīng)內(nèi)嵌了上傳圖片的依賴(lài)包,因此不需要再添加額外依賴(lài),具體實(shí)現(xiàn)代碼跟隨小編一起看看吧2021-04-04
Java面向?qū)ο箢?lèi)和對(duì)象實(shí)例詳解
面向?qū)ο竽耸荍ava語(yǔ)言的核心,是程序設(shè)計(jì)的思想,這篇文章主要介紹了Java面向?qū)ο箢?lèi)和對(duì)象的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-03-03
@SpringBootConfiguration重復(fù)加載報(bào)錯(cuò)問(wèn)題解決
@SpringBootApplication?注解的?exclude?屬性用于排除特定的自動(dòng)配置類(lèi),而不是用于排除主配置類(lèi)本身,因此,不能通過(guò)?exclude?屬性來(lái)排除主配置類(lèi)的加載,這篇文章主要介紹了@SpringBootConfiguration重復(fù)加載報(bào)錯(cuò),需要的朋友可以參考下2024-08-08
java web開(kāi)發(fā)中獲取tomcat上properties文件內(nèi)容的方法
java web開(kāi)發(fā)中如何獲取tomcat上properties文件內(nèi)容的方法,方便文件存儲(chǔ)位置的修改,解耦和,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07

