(精華)2020年8月28日 二十三種設計模式(七)-橋接模式(Bridge Pattern)
橋接模式(Bridge Pattern)
橋接模式屬於結構型模式,它將抽象部分與它的實現部分分離,使它們都可以相互獨立地變化。
利用面嚮物件的技術來使得某型別能夠輕鬆的沿著多個方向進行變化,而又不引入額外的複雜度,這就是橋接模式的核心意義。
角色
1、抽象(Abstraction)
定義抽象介面,該介面中包含實現具體行為、具體特徵的Implementor介面;
2、擴充抽象(Refined Abstraction)
繼承自Abstraction的子類,依舊是一個抽象的事物名;
3、實現(Implementor)
定義具體行為,具體特徵的應用介面;
4、具體實現(ConcreteImplementor)
Implementor的具體實現。
示例
名稱空間BridgePattern中包含電視機基類,3個具體電視機類,一個遙控器基類和1個具體遙控器類。本案例嘗試使用橋接模式來解決如何用遙控器來遙控不同的電視機完成相應的動作。
public abstract class Television {
public abstract void TurnOn();
public abstract void TurnOff();
public abstract void TurnChannel();
}
電視機基Television類,包含開啟電視TurnOn、關閉電視TurnOff、換臺功能TurnChannel。
public class Konka : Television {
public override void TurnOn() {
Console.WriteLine("Turn on Konka!");
}
public override void TurnOff() {
Console.WriteLine("Turn off Konka!");
}
public override void TurnChannel() {
Console.WriteLine("Turn channel Konka!");
}
}
具體電視類,康佳Konka類。
public class Lenovo : Television {
public override void TurnOn() {
Console.WriteLine("Turn on Lenovo!");
}
public override void TurnOff() {
Console.WriteLine("Turn off Lenovo!");
}
public override void TurnChannel() {
Console.WriteLine("Turn channel Lenovo!");
}
}
具體電視類,聯想Lenovo類。
public class Panasonic : Television {
public override void TurnOn() {
Console.WriteLine("Turn on Panasonic!");
}
public override void TurnOff() {
Console.WriteLine("Turn off Panasonic!");
}
public override void TurnChannel() {
Console.WriteLine("Turn channel Panasonic!");
}
}
具體電視類,松下Panasonic類。
public class TeleControllerBase {
public Television Television { get; set; }
public virtual void TurnOn() {
Television.TurnOn();
}
public virtual void TurnOff() {
Television.TurnOff();
}
public virtual void TurnChannel() {
Television.TurnChannel();
}
}
遙控器基類TeleControllerBase類,內部維持一個電視機基類的引用,幷包含對應的3個電視機功能。
public class TeleController : TeleControllerBase {
public override void TurnOff() {
base.TurnOff();
Console.WriteLine("-------------------------");
}
}
具體遙控器TeleController類。
public class Program {
private static TeleControllerBase _teleController = null;
public static void Main(string[] args) {
_teleController = new TeleController();
_teleController.Television = new Konka();
_teleController.TurnOn();
_teleController.TurnChannel();
_teleController.TurnOff();
_teleController.Television = new Lenovo();
_teleController.TurnOn();
_teleController.TurnChannel();
_teleController.TurnOff();
_teleController.Television = new Panasonic();
_teleController.TurnOn();
_teleController.TurnChannel();
_teleController.TurnOff();
Console.ReadKey();
}
}
以上是呼叫方的程式碼,以下是這個案例的輸出結果:
Turn on Konka!
Turn channel Konka!
Turn off Konka!
-------------------------
Turn on Lenovo!
Turn channel Lenovo!
Turn off Lenovo!
-------------------------
Turn on Panasonic!
Turn channel Panasonic!
Turn off Panasonic!
-------------------------
優點
1、抽象和實現的分離;
2、優秀的擴充套件能力;
3、實現細節對客戶透明。
缺點
1、橋接模式的引入會增加系統的理解與設計難度,由於聚合關聯關係建立在抽象層,要求開發者針對抽象進行設計與程式設計。
使用場景
1、如果一個系統需要在構件的抽象化角色和具體化角色之間增加更多的靈活性,避免在兩個層次之間建立靜態的繼承聯絡,通過橋接模式可以使它們在抽象層建立一個關聯關係;
2、對於那些不希望使用繼承或因為多層次繼承導致系統類的個數急劇增加的系統,橋接模式尤為適用;
3、一個類存在兩個獨立變化的維度,且這兩個維度都需要進行擴充套件。
相關文章
- C#設計模式-橋接模式(Bridge Pattern)C#設計模式橋接
- 設計模式 | 橋接模式(bridge)設計模式橋接
- 《設計模式》 - 6. 橋接模式( Bridge )設計模式橋接
- 設計模式(七)橋接設計模式橋接
- 設計模式 - Bridge 橋模式設計模式
- (精華)2020年8月28日 二十三種設計模式(六)-介面卡模式(Adapter Pattern)設計模式APT
- 設計模式-橋接模式設計模式橋接
- 從零開始學設計模式(七)—橋接模式設計模式橋接
- Java設計模式-橋接模式Java設計模式橋接
- 小白設計模式:橋接模式設計模式橋接
- 設計模式之【橋接模式】設計模式橋接
- 設計模式(八)——橋接模式設計模式橋接
- 設計模式之橋接模式設計模式橋接
- 設計模式 第七章 橋接模式、裝飾者模式、組合模式設計模式橋接
- Java橋模式(Bridge模式)Java模式
- 9.設計模式-橋接模式設計模式橋接
- PHP 設計模式之橋接模式PHP設計模式橋接
- 極簡設計模式-橋接模式設計模式橋接
- GoLang設計模式19 - 橋接模式Golang設計模式橋接
- Java設計模式(7)----------橋接模式Java設計模式橋接
- 設計模式之橋接設計模式橋接
- 設計模式之旅12--橋接模式設計模式橋接
- Java設計模式之(六)——橋接模式Java設計模式橋接
- 二十三種設計模式:策略模式設計模式
- 設計模式學習-裝飾模式,橋接模式設計模式橋接
- 設計模式(十三)----結構型模式之橋接模式設計模式橋接
- 10.橋接模式設計思想橋接模式
- 跟著GPT學設計模式之橋接模式GPT設計模式橋接
- 設計模式學習-使用go實現橋接模式設計模式Go橋接
- 設計模式:橋接模式及程式碼示例、橋接模式在jdbc中的體現、注意事項設計模式橋接JDBC
- 【設計模式】第七篇:和我一起簡單認識橋接模式設計模式橋接
- 2.2 橋接 Bridge橋接
- 23種設計模式(七)-狀態設計模式設計模式
- 設計模式系列之代理模式(Proxy Pattern)——物件的間接訪問設計模式物件
- 設計模式學習筆記(九)橋接模式及其應用設計模式筆記橋接
- 設計模式之策略模式和狀態模式(strategy pattern & state pattern)設計模式
- 設計模式--建造者模式(Builder Pattern)設計模式UI
- 設計模式--原型模式(Prototype Pattern)設計模式原型