設計模式之橋接模式
前言
這裡又學習一個新的原則,合成/聚合複用原則~。下面一起來看~
橋接模式
將抽象部分與它的實現部分分離,使它們都可以獨立的變化。這也是和合成/聚合分不開的。
也就是實現系統可能有多角度分類,每一種分類都有可能變化,那麼就是把這種多角度分離出來讓它們獨立變化,減少耦合。這也符合了開放-封閉原則。
幽默一下:
兩個抽象類之間有一條聚合線,像一座橋一樣,所以名為橋接模式~
場景
比如我們的手機。手機裡有很多軟體,不同的手機軟體不同,但是往往也有相同的軟體,如果我們將每一種軟體獨立開,那麼不同的手機只要拿自己需要的軟體部分就可以了。我們需要增加功能的話也不用修改原來的程式碼,擴充套件類就可以。運用合成/聚合原則,優先使用物件的合成或聚合,而不是類繼承。
應用
我們需要多角度去分類實現物件,而只用繼承會造成大量的類增加,不能滿足開放-封閉原則時,就應該考慮橋接模式。
程式碼展示
拿手機品牌與軟體舉例子:
手機軟體抽象類:
abstract class HandsetSoft
{
public abstract void Run();
}
手機軟體具體類:
如果這裡我想要新增一些其他軟體,比如說MP3功能,那麼只需要增加這個功能類就可以了,不會影響其他軟體類
//具體類
//手遊
class HandsetGame:HandsetSoft
{
public override void Run()
{
Console.WriteLine("執行手遊");
}
}
//通訊錄---程式碼同上↑
class HandsetAddressList : HandsetSoft
{
public override void Run()
{
Console.WriteLine("執行手機通訊錄");
}
}
手機品牌類:
//手機品牌類
abstract class HandsetBrand
{
protected HandsetSoft soft;
//設定手機軟體
public void SetHandsetSoft(HandsetSoft soft)//品牌需要關注軟體,
{
this.soft = soft;
}
//執行
public abstract void Run();
}
手機品牌具體類:
如果我要增加一個S牌,只要增加一個品牌子類就可以了。不會影響別的類。
//具體手機品牌
//N牌
class HandsetBrandN:HandsetBrand
{
public override void Run()
{
soft.Run();
}
}
//M牌
class HandsetBrandM : HandsetBrand
{
public override void Run()
{
soft.Run();
}
}
客戶端程式碼:
class Program
{
static void Main(string[] args)
{
HandsetBrand a;
//N
a = new HandsetBrandN();
a.SetHandsetSoft(new HandsetGame());
a.Run();
a.SetHandsetSoft(new HandsetAddressList());
a.Run();
//M
a = new HandsetBrandM();
a.SetHandsetSoft(new HandsetGame());
a.Run();
a.SetHandsetSoft(new HandsetAddressList());
a.Run();
Console.Read();
}
}
效果圖:
合成/聚合複用原則
what
儘量使用合成/聚合,儘量不要使用類繼承。
合成和聚合都是關聯的特殊種類。
1. 聚合表示一種弱的‘擁有’關係,體現的時A可以包含B,但B不是A的一部分;
2. 合成則時一種強的‘擁有’關係,體現了嚴格的部分和整體的關係,部分和整體的生命週期一樣。
example
合成:大雁和翅膀,翅膀與大雁是部分與整體的關係,它們的生命週期一樣。
聚合:大雁和雁群,每隻大雁屬於一個雁群,但一個雁群可以有很多隻大雁。
好處
優先使用物件的合成/聚合有助於你保持每個類被封裝,並被集中在單個任務上。這樣類和類繼承層次會保持較小規模,並且不太可能增長為不可控制的龐然大物。
後記
只要真正深入理解了設計模式,很多設計模式其實就是原則的應用而已,或許在不知不覺中就在使用設計模式了~所以還是要以後多實踐呶~
相關文章
- 設計模式之【橋接模式】設計模式橋接
- PHP 設計模式之橋接模式PHP設計模式橋接
- 設計模式之橋接設計模式橋接
- Java設計模式之(六)——橋接模式Java設計模式橋接
- 設計模式-橋接模式設計模式橋接
- Java設計模式-橋接模式Java設計模式橋接
- 設計模式 | 橋接模式(bridge)設計模式橋接
- 小白設計模式:橋接模式設計模式橋接
- 設計模式(八)——橋接模式設計模式橋接
- 設計模式(十三)----結構型模式之橋接模式設計模式橋接
- 跟著GPT學設計模式之橋接模式GPT設計模式橋接
- 9.設計模式-橋接模式設計模式橋接
- 極簡設計模式-橋接模式設計模式橋接
- GoLang設計模式19 - 橋接模式Golang設計模式橋接
- Java設計模式(7)----------橋接模式Java設計模式橋接
- 設計模式(七)橋接設計模式橋接
- 《設計模式》 - 6. 橋接模式( Bridge )設計模式橋接
- 設計模式之旅12--橋接模式設計模式橋接
- 設計模式學習-裝飾模式,橋接模式設計模式橋接
- C#設計模式-橋接模式(Bridge Pattern)C#設計模式橋接
- 10.橋接模式設計思想橋接模式
- Java進階篇設計模式之四 -----介面卡模式和橋接模式Java設計模式橋接
- 從零開始學設計模式(七)—橋接模式設計模式橋接
- 設計模式學習-使用go實現橋接模式設計模式Go橋接
- JavaScript面試系列:JavaScript設計模式之橋接模式和懶載入JavaScript面試設計模式橋接
- 設計模式:橋接模式及程式碼示例、橋接模式在jdbc中的體現、注意事項設計模式橋接JDBC
- 設計模式 第七章 橋接模式、裝飾者模式、組合模式設計模式橋接
- 設計模式學習筆記(九)橋接模式及其應用設計模式筆記橋接
- 設計模式 - Bridge 橋模式設計模式
- 結構型模式:橋接模式模式橋接
- 08_橋接模式橋接模式
- 結構型模式之介面卡模式、橋接模式與裝飾器模式(一)模式橋接
- 23種設計模式(六)單一職責之橋模式設計模式
- 使用橋接模式設計複雜的訊息系統橋接模式
- c#橋接模式詳解C#橋接模式
- 橋接模式(c++實現)橋接模式C++
- 小白都能懂的設計模式 java版 橋接模式具體實現(超詳細)設計模式Java橋接
- 【設計模式】第七篇:和我一起簡單認識橋接模式設計模式橋接