【設計模式】Java設計模式 – 橋接模式
【設計模式】Java設計模式 – 橋接模式
😄 不斷學習才是王道
🔥 繼續踏上學習之路,學之分享筆記
👊 總有一天我也能像各位大佬一樣
🏆原創作品,更多關注我CSDN: 一個有夢有戲的人
👊準備將博客園、CSDN一起記錄分享自己的學習心得!!!
🌝分享學習心得,歡迎指正,大家一起學習成長!
簡介
橋接(Bridge)是用於把抽象化與實現化解耦,使得二者可以獨立變化。這種類型的設計模式屬於結構型模式,它通過提供抽象化和實現化之間的橋接結構,來實現二者的解耦。
這種模式涉及到一個作為橋接的接口,使得實體類的功能獨立於接口實現類。這兩種類型的類可被結構化改變而互不影響。
橋接模式實例
橋接模式:將實現和抽象放在兩個不同的類層次中,使之各自可以獨立改變。
他的主要特點是把抽象與行為分離開來,保持了各自的獨立性和擴展。
舉個汽車例子,汽車有多種品牌,也有多種類型,在擴展樣式或者品牌的時候互不影響,我們就可以將抽象部分與實現部分分離,使它們都可以獨立的變化,讓它們獨立變化,來減少它們之間耦合。
UML圖:
提供商標接口類,汽車品牌是他的實現類;汽車類是抽象類,汽車的類別通過繼承抽象類來分離出來。
代碼示例
代碼如下:
①、品牌接口
package com.lyd.demo;
/**
* @Author: lyd
* @Description: 汽車品牌的接口
* @Date: 2022-08-28
*/
public interface Brand {
void info();
void open();
void close();
}
②、汽車品牌
繼承汽車接口類
package com.lyd.demo.car;
import com.lyd.demo.Brand;
/**
* @Author: lyd
* @Description: 奔馳汽車類
* @Date: 2022-08-28
*/
public class Benz implements Brand {
private String type;
public Benz(String type) {
this.type = type;
}
public void info() {
System.out.println("奔馳汽車->" + type);
}
public void open() {
System.out.println("奔馳汽車");
}
public void close() {
System.out.println("奔馳汽車");
}
}
紅旗汽車類相同,這裡就不貼代碼,詳細代碼之後會上傳github中。
③、抽象汽車類
通過聚合方式,使用構造法獲取品牌對象進行實例化
package com.lyd.demo;
/**
* @Author: lyd
* @Description: 汽車抽象類
* @Date: 2022-08-28
*/
public abstract class Car {
private Brand brand;
public Car(Brand brand) {
this.brand = brand;
}
public void info() {
this.brand.info();
}
public void open() {
this.brand.open();
}
public void close() {
this.brand.close();
}
}
④、汽車類型子類
繼承父類,重寫父類方法,這裡也調用了父類方法,用打印的方式簡單理解
package com.lyd.demo.type;
import com.lyd.demo.Brand;
import com.lyd.demo.Car;
/**
* @Author: lyd
* @Description: 新能源
* @Date: 2022-08-28
*/
public class NewEnergy extends Car {
public NewEnergy(Brand brand) {
super(brand);
}
public void info() {
System.out.print("新能源類型汽車 -- ");
super.info();
}
public void open() {
System.out.print("新能源類型汽車啟動 -- ");
super.open();
}
public void close() {
System.out.print("新能源類型汽車關閉 -- ");
super.close();
}
}
⑤、橋接模式測試
通過new汽車類型方式獲取汽車對象,其中可得到什麼類型什麼品牌的汽車
package com.lyd.demo.bridge;
import com.lyd.demo.Car;
import com.lyd.demo.car.Benz;
import com.lyd.demo.car.HongQi;
import com.lyd.demo.type.NewEnergy;
import com.lyd.demo.type.Suv;
/**
* @Author: lyd
* @Description: 測試
* @Date: 2022-08-28
*/
public class BridgeTest {
public static void main(String[] args) {
Car banz = new Suv(new Benz("GLA"));
banz.info();
banz.open();
banz.close();
Car hq = new NewEnergy(new HongQi("H5"));
hq.info();
hq.open();
hq.close();
}
}
運行結果:
👍創作不易,如有錯誤請指正,感謝觀看!記得一鍵三連哦!👍
💓德德小建議:
理解設計模式不是一件簡單的事情,需要不斷的學習和動手去練習,才能理解。只有掌握好設計模式,才能夠真正的理解SpringAOP和Mybatis的底層原理。各位讀者可以和我一樣,動手敲一敲代碼,甚至用不同的例子來做,通過debug一步一步調試,還有就是多看看別人的例子。能夠有助於理解!謝謝各位觀看指點!❤️ ❤️ ❤️