>>回傳《C#常用設計模式》
- 1. 簡介
- 2. 示例
- 3. 優缺點
- 3.1. 優點
- 3.2. 缺點
- 3.3. 適用的環境
1. 簡介
- 定義
- 將抽象部分與它的實作部分解耦,使得兩者都能夠獨立的變化
- 蠟筆與毛筆
- 蠟筆有不同的大小和顏色,需要用哪個筆就用哪個筆
- 毛筆分為不同大小,卻只有一個調色盤,里面裝著不同的顏料,我們需要什么顏色,就用對應大小的毛筆去蘸對應的顏料
- 二者相比,我倒是覺得還是蠟筆方便,但是,試想一下,如果我們筆的大小變化有很多,顏色我也要越多越好,以應對變化
- 毛筆只要提供對應大小的毛筆,顏色只要放到調色盤里就OK了,數量相對少很多,我們只要帶著不同大小的筆和調色盤就好了
- 橋接模式,就是要像毛筆這樣應對不同(多維度)變化而來的,
- 類圖

2. 示例
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
namespace ConsoleApplication4
{
//client
class Program
{
static void Main(string[] args)
{
UserBLL bll1 = new CustomerUserBLL();
bll1.SetDAL(new UserMSSQLDAL());
bll1.Add();
Console.ReadKey();
Console.WriteLine();
UserBLL bll2 = new CustomerUserBLL();
bll2.SetDAL(new UserMySQLDAL());
bll2.Add();
Console.ReadKey();
}
}
#region 抽象
//Abstracttion
public abstract class UserBLL
{
private UserDAL dal;
public void SetDAL(UserDAL userDAL)
{
dal = userDAL;
}
public virtual void Add()
{
dal.AddUser();
}
}
//Implementor interface
public abstract class UserDAL
{
public abstract void AddUser();
}
#endregion
//BLL 實作 RefinedAbstracttion
public class CustomerUserBLL : UserBLL
{
public override void Add()
{
Console.WriteLine("Customer-User-BLL Add");
base.Add();
}
}
//MySQL DAL ConcreteImplementorA
public class UserMySQLDAL : UserDAL
{
public override void AddUser()
{
Console.WriteLine("--User-My-SQL-DAL AddUser");
}
}
//MSSQL DAL 實作 ConcreteImplementorB
public class UserMSSQLDAL : UserDAL
{
public override void AddUser()
{
Console.WriteLine("--User-MS-SQL-DAL AddUser");
}
}
}
3. 優缺點
3.1. 優點
- 分離抽象介面及其實作部分,從而可以獲得更多維度組合物件,即可以搭建很多的橋
- 橋接模式可取代多層繼承方案,極大減少了子類的個數
- 提高了系統的可擴展性,多維度間任意擴展需要擴展的一個維度,不需修改原有系統,符合開閉原則
3.2. 缺點
- 會增加系統的理解與設計難度,需要對抽象層進行編程
- 要正確的分別出獨立變化的維度,使其使用范圍有一定局限性
3.3. 適用的環境
- 如果一個系統需要在抽象化和具體化之間增加更多的靈活性,避免在兩個層次間建立靜態的繼承關系,可以用橋接模式在抽象層建立關聯關系
- 抽象部分和實作部分可以以繼承的方式獨立擴展而不互相影響,系統需要對抽象化角色和實作化角色進行動態耦合
- 一個類存在兩個或多個獨立變化的維度,且各自需要獨立的進行擴展
- 對于不希望使用繼承或因為多層繼承導致系統類的個數急劇增加的系統,橋接模式很適用
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/260179.html
標籤:設計模式
上一篇:全網最詳解Spring Security登錄原理(帶你看源代碼)
下一篇:Composite組合模式
