亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

剖析設計模式編程中C#對于組合模式的運用

2020-01-24 01:16:07
字體:
來源:轉載
供稿:網友

一、引言
在軟件開發過程中,我們經常會遇到處理簡單對象和復合對象的情況,例如對操作系統中目錄的處理就是這樣的一個例子,因為目錄可以包括單獨的文件,也可以包括文件夾,文件夾又是由文件組成的,由于簡單對象和復合對象在功能上區別,導致在操作過程中必須區分簡單對象和復合對象,這樣就會導致客戶調用帶來不必要的麻煩,然而作為客戶,它們希望能夠始終一致地對待簡單對象和復合對象。然而組合模式就是解決這樣的問題。下面讓我們看看組合模式是怎樣解決這個問題的。

二、組合模式的詳細介紹
2.1 組合模式的定義
組合模式允許你將對象組合成樹形結構來表現”部分-整體“的層次結構,使得客戶以一致的方式處理單個對象以及對象的組合。下面我們用繪制的例子來詳細介紹組合模式,圖形可以由一些基本圖形元素組成(如直線,圓等),也可以由一些復雜圖形組成(由基本圖形元素組合而成),為了使客戶對基本圖形和復雜圖形的調用保持一致,我們使用組合模式來達到整個目的。

組合模式實現的最關鍵的地方是――簡單對象和復合對象必須實現相同的接口。這就是組合模式能夠將組合對象和簡單對象進行一致處理的原因。

2.2 組合模式的實現
舉例:
家族譜的編寫:
男性:可傳宗接代,也有權利把一些人剔除族譜。
女性:記錄到家譜中,但不能傳宗接代。

理解:每一個小家庭中,爸爸媽媽和我,都是爸爸做主,可踢出我跟媽媽中的任何一個,也可增加任何一個。組件模式中的組件可以是單獨一個對象組成,也可以是多個組件組成(一個家庭,甚至一個家庭的多級延續);
類圖:

201621892853820.png (630×508)

族員共性代碼:

  //// <summary>  /// //族人 抽象出來的族人共性  /// </summary>  public abstract class Father  {    //族人的姓名    protected string name = string.Empty;    public string Name    {      get      {        return name;      }    }    //增加后代    public abstract void Add(Father boy);    //逐出家譜    public abstract void Remove(Father boy);    //定義所有族人,做個簡介    public abstract void Intro();  }家族成員代碼 //男性后代  public class Boy : Father  {    //構造函數    public Boy() { }    public Boy(string Name)    {      this.name = Name;    }    List<Father> myFamily = new List<Father>();    //自我簡介    public override void Intro()    {      Console.WriteLine("我是:{0};", Name);      foreach (Father f in myFamily)      {        f.Intro();      }    }    //增加后代    public override void Add(Father boy)    {      myFamily.Add(boy);    }    //逐出家譜    public override void Remove(Father boy)    {      myFamily.Remove(boy);    }  }  //女性后代   public class Gril : Father  {    //構造函數    public Gril() { }    public Gril(string Name)    {      this.name = Name;    }    //自我簡介    public override void Intro()    {      Console.WriteLine("我是:{0};", Name);    }    //不能添加    public override void Add(Father store)    {      throw new NotImplementedException();    }    //不能刪除    public override void Remove(Father store)    {      throw new NotImplementedException();    }  }客戶端代碼:    public static void Main()    {      //爺爺取老婆      Boy yeye = new Boy("爺爺");      Gril nainai = new Gril("奶奶");      yeye.Add(nainai);      //爺爺要孩子      Boy baba = new Boy("爸爸");      Gril gugu = new Gril("姑姑");            yeye.Add(gugu);      yeye.Add(baba);      //爸爸要我      Boy me = new Boy("me");      baba.Add(me);      //我要孩子      Boy son = new Boy("son");      me.Add(son);      //爺爺的大家庭,族譜做介紹      yeye.Intro();      Console.Read();    }



2.3組合模式的類圖
看完了上面,讓我們具體看看組合模式的類圖來理清楚組合模式中類之間的關系。
透明式的組合模式類圖:

201621892954450.png (651×566)

安全式組合模式的類圖:

201621893012579.png (607×476)

組合模式中涉及到三個角色:

  • 抽象構件(Component)角色:這是一個抽象角色,上面實現中Graphics充當這個角色,它給參加組合的對象定義出了公共的接口及默認行為,可以用來管理所有的子對象(在透明式的組合模式是這樣的)。在安全式的組合模式里,構件角色并不定義出管理子對象的方法,這一定義由樹枝結構對象給出。
  • 樹葉構件(Leaf)角色:樹葉對象時沒有下級子對象的對象,上面實現中Line和Circle充當這個角色,定義出參加組合的原始對象的行為
  • 樹枝構件(Composite)角色:代表參加組合的有下級子對象的對象,上面實現中ComplexGraphics充當這個角色,樹枝對象給出所有管理子對象的方法實現,如Add、Remove等。

三、組合模式的優缺點
優點:

組合模式使得客戶端代碼可以一致地處理對象和對象容器,無需關系處理的單個對象,還是組合的對象容器。
將”客戶代碼與復雜的對象容器結構“解耦。
可以更容易地往組合對象中加入新的構件。
缺點:使得設計更加復雜。客戶端需要花更多時間理清類之間的層次關系。(這個是幾乎所有設計模式所面臨的問題)。

注意的問題:

有時候系統需要遍歷一個樹枝結構的子構件很多次,這時候可以考慮把遍歷子構件的結構存儲在父構件里面作為緩存。
客戶端盡量不要直接調用樹葉類中的方法(在我上面實現就是這樣的,創建的是一個樹枝的具體對象,應該使用GraphicscomplexGraphics = new ComplexGraphics("一個復雜圖形和兩條線段組成的復雜圖形");),而是借用其父類(Graphics)的多態性完成調用,這樣可以增加代碼的復用性。
四、組合模式的使用場景
在以下情況下應該考慮使用組合模式:

  • 需要表示一個對象整體或部分的層次結構。
  • 希望用戶忽略組合對象與單個對象的不同,用戶將統一地使用組合結構中的所有對象。

五、組合模式在.NET中的應用

組合模式在.NET 中最典型的應用就是應用與WinForms和Web的開發中,在.NET類庫中,都為這兩個平臺提供了很多現有的控件,然而System.Windows.Forms.dll中System.Windows.Forms.Control類就應用了組合模式,因為控件包括Label、TextBox等這樣的簡單控件,同時也包括GroupBox、DataGrid這樣復合的控件,每個控件都需要調用OnPaint方法來進行控件顯示,為了表示這種對象之間整體與部分的層次結構,微軟把Control類的實現應用了組合模式(確切地說應用了透明式的組合模式)。

六、總結
到這里組合模式的介紹就結束了,組合模式解耦了客戶程序與復雜元素內部結構,從而使客戶程序可以向處理簡單元素一樣來處理復雜元素。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91丝袜美腿美女视频网站| 欧洲午夜精品久久久| 国产激情综合五月久久| 欧美香蕉大胸在线视频观看| 久99九色视频在线观看| 中文欧美在线视频| 日韩视频免费在线| 国产精品一区电影| 欧美成人性生活| 在线精品视频视频中文字幕| 日韩美女视频免费看| 中文字幕亚洲精品| 亚洲国产欧美一区二区三区久久| 国产亚洲欧美一区| 久久成年人视频| 亚洲mm色国产网站| 亚洲精品自拍第一页| 精品久久久久久久久中文字幕| 欧美激情va永久在线播放| 在线观看欧美成人| 亚洲天堂影视av| 日韩av电影在线播放| 国产亚洲视频在线| 国产精品视频1区| 欧美成人国产va精品日本一级| 美日韩精品免费视频| 日韩欧美极品在线观看| 一区二区av在线| 欧洲成人午夜免费大片| 午夜美女久久久久爽久久| 久久在线精品视频| …久久精品99久久香蕉国产| 久久精品国产精品亚洲| 成人激情综合网| 一本一道久久a久久精品逆3p| 亚洲成人1234| 精品久久久久久久久久久| 国产成人综合久久| 91免费精品国偷自产在线| 日韩在线观看免费高清| 亚洲人精选亚洲人成在线| 精品一区二区三区四区| 免费97视频在线精品国自产拍| 亚洲欧美一区二区三区四区| 55夜色66夜色国产精品视频| 欧美一级在线播放| 福利微拍一区二区| 一二美女精品欧洲| 国产精品爽黄69天堂a| 色噜噜狠狠狠综合曰曰曰88av| 国产日韩精品综合网站| 在线免费观看羞羞视频一区二区| 亚洲国产精品热久久| 色七七影院综合| 亚洲深夜福利网站| 富二代精品短视频| 日韩av在线网址| 亚洲成人av片在线观看| 精品中文视频在线| 久久99久国产精品黄毛片入口| 国产精品久久久久久五月尺| 日韩最新免费不卡| 中文字幕日韩在线观看| 性欧美长视频免费观看不卡| 国产精品亚洲精品| 亚洲人成在线观| 97视频在线观看免费| 久久99国产精品久久久久久久久| 丝袜亚洲欧美日韩综合| 欧美日韩国产第一页| 亚洲国产精品电影在线观看| 久久夜色精品亚洲噜噜国产mv| 日韩美女av在线| 亚洲欧美另类自拍| 国产精品久久久久久亚洲影视| 欧美日韩国产精品一区二区不卡中文| 日本最新高清不卡中文字幕| 亚洲精品456在线播放狼人| 亚洲最大的免费| 精品女同一区二区三区在线播放| 欧美电影在线免费观看网站| 久久久成人av| 日韩av免费在线看| 亚洲欧美一区二区激情| 亚洲视频在线观看网站| 亚洲片国产一区一级在线观看| 精品露脸国产偷人在视频| 亚洲精品动漫100p| 日韩欧美在线视频日韩欧美在线视频| 中文字幕亚洲激情| 97在线免费视频| 热99精品只有里视频精品| 97精品国产91久久久久久| 九九热视频这里只有精品| 亚洲日本中文字幕免费在线不卡| 中文字幕亚洲欧美日韩2019| 色播久久人人爽人人爽人人片视av| 国产精品久久网| 亚洲精品综合久久中文字幕| 国产一区二区久久精品| 久久偷看各类女兵18女厕嘘嘘| 欧美伊久线香蕉线新在线| 国产精品高清在线观看| 国产精品久久久久久久久久新婚| 日韩视频免费中文字幕| 国产中文欧美精品| 欧美放荡办公室videos4k| 欧美性xxxxxxxxx| 久久久www成人免费精品张筱雨| 超碰日本道色综合久久综合| 亚洲一区二区久久| 日韩av电影国产| 欧美日韩亚洲91| 九色91av视频| 精品久久香蕉国产线看观看gif| 一区二区在线免费视频| 久久成人免费视频| 国产精品九九九| 色偷偷888欧美精品久久久| 久久6精品影院| 国产欧美日韩中文字幕在线| 中文字幕欧美日韩| 日韩高清电影好看的电视剧电影| 精品在线小视频| 奇米四色中文综合久久| 亚洲第一国产精品| 国产精品永久免费视频| 亚洲激情免费观看| 亚洲综合视频1区| 欧美在线性爱视频| 另类图片亚洲另类| 欧美日韩国产中字| 欧美做受高潮电影o| 欧美性猛交xxxx久久久| 日韩视频―中文字幕| 91香蕉嫩草影院入口| 欧美激情综合色综合啪啪五月| 国产精品视频1区| 成人信息集中地欧美| 日韩av大片免费看| 色偷偷av一区二区三区乱| 亚洲欧美在线第一页| 国产精品情侣自拍| 精品久久中文字幕| 中文字幕在线观看日韩| 亚洲国产精彩中文乱码av| 欧美成人性色生活仑片| 欧美国产中文字幕| 热99在线视频| 国产精品视频999| 日韩中文字幕精品视频| 亚洲2020天天堂在线观看| 欧美日韩国产一区二区三区| 国产亚洲一区二区在线| 亚洲精品欧美日韩专区| 国产精品久久久久秋霞鲁丝| 国产日韩欧美在线| 国产精品偷伦视频免费观看国产| 亚洲精品自产拍| www.日韩av.com| 欧洲成人在线观看| 亚洲欧美国产日韩天堂区| 亚洲欧美一区二区三区在线| 91成人在线视频|