欧美大屁股bbbbxxxx,狼人大香伊蕉国产www亚洲,男ji大巴进入女人的视频小说,男人把ji大巴放进女人免费视频,免费情侣作爱视频

歡迎來到入門教程網(wǎng)!

C#教程

當(dāng)前位置:主頁 > 軟件編程 > C#教程 >

簡單了解C#設(shè)計模式編程中的橋接模式

來源:本站原創(chuàng)|時間:2020-01-10|欄目:C#教程|點(diǎn)擊: 次

橋接模式的概念
定義:將抽象部分與實(shí)現(xiàn)部分分離,使它們都可以獨(dú)立的變化。

理解:為啦解決一個對象變化而影響多個對象跟著變化,需要把具體實(shí)現(xiàn)對象抽象化,使降低對象和變化因素的耦合度,提高系統(tǒng)的可維護(hù)性和擴(kuò)展性。

舉例:

手機(jī)系統(tǒng)的生態(tài)圈問題:

啰嗦點(diǎn):眾所周知wp的生態(tài)圈相對與有些系統(tǒng)較差,各位需努力,諾基亞走下神壇,wp要走上神壇,頂一下哈。

wp/ios系統(tǒng)類:運(yùn)行軟件,可承載本運(yùn)行環(huán)境下的任何軟件,如果新增一個系統(tǒng),軟件就要多做一個系統(tǒng)的版本

weixin/kuwo軟件類:開始運(yùn)行軟件,如果新加一塊軟件,就要做眾多系統(tǒng)版本的。

實(shí)現(xiàn):在iso和wp系統(tǒng)中運(yùn)行,各種不同的軟件。

類圖:

下面我們來根據(jù)具體的代碼了解橋接模式。
軟件代碼:

 //軟件
  public interface ISoftWare
  {
    void start();
  }

  //Kuwo
  public class Kuwo : ISoftWare
  {
    public void start()
    {
      Console.WriteLine("聽音樂,用酷我!");
    }
  }
  //WeiXin
  public class WeiXin : ISoftWare
  {
    public void start()
    {
      Console.WriteLine("讓你我的距離更近!");
    }
  }


操作系統(tǒng)代碼

  //操作系統(tǒng),跑軟件
  public abstract class System
  {
    public abstract void Run(ISoftWare software);
  }

  //Wp
  public class WinPhone : System
  {
    public override void Run(ISoftWare software)
    {
      Console.WriteLine("Winphone系統(tǒng),給你想要的;");
      software.start();
    }
  }

  //Ios
  public class Ios : System
  {
    public override void Run(ISoftWare software)
    {
      Console.WriteLine("Ios系統(tǒng),給你想不到的;");
      software.start();
    }
  }


客戶端代碼

public static void Main()
    {
      ISoftWare weixin = new WeiXin();
      ISoftWare kuwo = new Kuwo();
      //Wp系統(tǒng)
      System WpSys = new WinPhone();
      WpSys.Run(weixin);
      WpSys.Run(kuwo);
      //IOS系統(tǒng)
      System IosSys = new Ios();
      IosSys.Run(weixin);
      IosSys.Run(kuwo);

      Console.Read();
    }

橋接模式的優(yōu)缺點(diǎn)
介紹完橋接模式,讓我們看看橋接模式具體哪些優(yōu)缺點(diǎn)。

優(yōu)點(diǎn):

  • 把抽象接口與其實(shí)現(xiàn)解耦。
  • 抽象和實(shí)現(xiàn)可以獨(dú)立擴(kuò)展,不會影響到對方。
  • 實(shí)現(xiàn)細(xì)節(jié)對客戶透明,對用于隱藏了具體實(shí)現(xiàn)細(xì)節(jié)。

缺點(diǎn): 增加了系統(tǒng)的復(fù)雜度

使用場景
我們再來看看橋接模式的使用場景,在以下情況下應(yīng)當(dāng)使用橋接模式:

如果一個系統(tǒng)需要在構(gòu)件的抽象化角色和具體化角色之間添加更多的靈活性,避免在兩個層次之間建立靜態(tài)的聯(lián)系。
設(shè)計要求實(shí)現(xiàn)化角色的任何改變不應(yīng)當(dāng)影響客戶端,或者實(shí)現(xiàn)化角色的改變對客戶端是完全透明的。
需要跨越多個平臺的圖形和窗口系統(tǒng)上。
一個類存在兩個獨(dú)立變化的維度,且兩個維度都需要進(jìn)行擴(kuò)展。

一個實(shí)際應(yīng)用橋接模式的例子
橋接模式也經(jīng)常用于具體的系統(tǒng)開發(fā)中,對于三層架構(gòu)中就應(yīng)用了橋接模式,三層架構(gòu)中的業(yè)務(wù)邏輯層BLL中通過橋接模式與數(shù)據(jù)操作層解耦(DAL),其實(shí)現(xiàn)方式就是在BLL層中引用了DAL層中一個引用。這樣數(shù)據(jù)操作的實(shí)現(xiàn)可以在不改變客戶端代碼的情況下動態(tài)進(jìn)行更換,下面看一個簡單的示例代碼:

// 客戶端調(diào)用
  // 類似Web應(yīng)用程序
  class Client
  {
    static void Main(string[] args)
    {
      BusinessObject customers = new CustomersBusinessObject("ShangHai");
      customers.Dataacces = new CustomersDataAccess();
      customers.Add("小六");
      Console.WriteLine("增加了一位成員的結(jié)果:");
      customers.ShowAll();
      customers.Delete("王五");
      Console.WriteLine("刪除了一位成員的結(jié)果:");
      customers.ShowAll();
      Console.WriteLine("更新了一位成員的結(jié)果:");
      customers.Update("Learning_Hard");
      customers.ShowAll();
      Console.Read();
    }
  }
  // BLL 層
  public class BusinessObject
  {
    // 字段
    private DataAccess dataacess;
    private string city;
    public BusinessObject(string city)
    {
      this.city = city;
    }
    // 屬性
    public DataAccess Dataacces
    {
      get { return dataacess; }
      set { dataacess = value; }
    }
    // 方法
    public virtual void Add(string name)
    {
      Dataacces.AddRecord(name);
    }
    public virtual void Delete(string name)
    {
      Dataacces.DeleteRecord(name);
    }
    public virtual void Update(string name)
    {
      Dataacces.UpdateRecord(name);
    }
    public virtual string Get(int index)
    {
      return Dataacces.GetRecord(index);
    }
    public virtual void ShowAll()
    {
      Console.WriteLine();
      Console.WriteLine("{0}的顧客有:", city);
      Dataacces.ShowAllRecords();
    }
  }
  public class CustomersBusinessObject : BusinessObject
  {
    public CustomersBusinessObject(string city)
      : base(city) { }
    // 重寫方法
    public override void ShowAll()
    {
      Console.WriteLine("------------------------");
      base.ShowAll();
      Console.WriteLine("------------------------");
    }
  }
  /// <summary>
  /// 相當(dāng)于三層架構(gòu)中數(shù)據(jù)訪問層(DAL)
  /// </summary>
  public abstract class DataAccess
  {
    // 對記錄的增刪改查操作
    public abstract void AddRecord(string name);
    public abstract void DeleteRecord(string name);
    public abstract void UpdateRecord(string name);
    public abstract string GetRecord(int index);
    public abstract void ShowAllRecords();
  }
  public class CustomersDataAccess:DataAccess
  {
    // 字段
    private List<string> customers =new List<string>();
    public CustomersDataAccess()
    {
      // 實(shí)際業(yè)務(wù)中從數(shù)據(jù)庫中讀取數(shù)據(jù)再填充列表
      customers.Add("Learning Hard");
      customers.Add("張三");
      customers.Add("李四");
      customers.Add("王五");
    }
    // 重寫方法
    public override void AddRecord(string name)
    {
      customers.Add(name);
    }
    public override void DeleteRecord(string name)
    {
      customers.Remove(name);
    }
    public override void UpdateRecord(string updatename)
    {
      customers[0] = updatename;
    }
    public override string GetRecord(int index)
    {
      return customers[index];
    }
    public override void ShowAllRecords()
    {
      foreach (string name in customers)
      {
        Console.WriteLine(" " + name);
      }
    }
       
  }


上一篇:C#實(shí)現(xiàn)PDF文件添加圖片背景

欄    目:C#教程

下一篇:深入解析C#編程中泛型委托的使用

本文標(biāo)題:簡單了解C#設(shè)計模式編程中的橋接模式

本文地址:http://mengdiqiu.com.cn/a1/C_jiaocheng/6695.html

網(wǎng)頁制作CMS教程網(wǎng)絡(luò)編程軟件編程腳本語言數(shù)據(jù)庫服務(wù)器

如果侵犯了您的權(quán)利,請與我們聯(lián)系,我們將在24小時內(nèi)進(jìn)行處理、任何非本站因素導(dǎo)致的法律后果,本站均不負(fù)任何責(zé)任。

聯(lián)系QQ:835971066 | 郵箱:835971066#qq.com(#換成@)

Copyright © 2002-2020 腳本教程網(wǎng) 版權(quán)所有