程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C# 設計形式系列教程-建造者形式

C# 設計形式系列教程-建造者形式

編輯:C#入門知識

C# 設計形式系列教程-建造者形式。本站提示廣大學習愛好者:(C# 設計形式系列教程-建造者形式)文章只能為提供參考,不一定能成為您想要的結果。以下是C# 設計形式系列教程-建造者形式正文


1. 概述

  將一個龐雜對象的結構與它的表現分別,使異樣的構建進程可以創立分歧的表現,如許的設計形式被稱為建造者形式。

2. 建造者形式中的腳色

  2.1 建造者(Builder):為創立一個產物對象的各個部件指定籠統接口。
  2.2 詳細建造者(ConcreteBuilder):完成Builder的接口以結構和拆卸該產物的各個部件,界說並明白它所創立的表現,並 供給一個檢索產物的接口。
  2.3 批示者(Director):批示並結構一個應用Builder接口的對象。
  2.4 產物(Product):表現被結構的龐雜對象。ConcreteBuilder創立該產物的外部表現並界說它的拆卸進程,包括界說構成部件的類,包含將這些部件拆卸成終究產物的接口。

3. 實例:創立一小我,這小我可以有分歧的特色,可所以瘦子,可所以胖子,可所以高個子,也能夠是矮個子。

  3.1 以下是這個實例的類圖,和對類圖的解讀。

https://www.aspphp.online/bianchen/UploadFiles_4619/201707/2017072810422025.png

  3.2 代碼完成及解讀:

  // 要建造的產物
  public class Person
  {
    public string Head { get; set; }
    public string Body { get; set; }
    public string Arm { get; set; }
    public string Leg { get; set; }
  }

  // 界說創立者接口,完成者必需完成該接口中界說的一切籠統辦法,避免完成者忽視而漏掉某個部件的創立
  public abstract class Builder
  {
    protected Person Person { get; set; }
    public Builder()
    {
      Person = new Person();
    }

    // 建造頭
    public abstract void BuildHead();
    // 建造身材
    public abstract void BuildBody();
    // 建造胳膊
    public abstract void BuildArm();
    // 建造腿
    public abstract void BuildLeg();

    // 前往生成好的對象,這是一個詳細辦法,每一個子類都可使用它來前往一個曾經創立勝利的對象
    public Person GetPerson()
    {
      return Person;
    }
  }

  // 建造者的詳細完成,這裡是要建造出一個胖子
  public class ThinPersonBuilder : Builder
  {
    public ThinPersonBuilder()
    {
      Person = new Person();
    }

    public override void BuildHead()
    {
      Person.Head = "胖子的腦殼";
    }

    public override void BuildBody()
    {
      Person.Body = "胖子的身材";
    }

    public override void BuildArm()
    {
      Person.Arm = "胖子的胳膊";
    }

    public override void BuildLeg()
    {
      Person.Leg = "胖子的腿";
    }

  }

  // 建造者的詳細完成,這裡是要建造出一個瘦子
  public class FatPersonBuilder : Builder
  {
    public override void BuildHead()
    {
      Person.Head = "瘦子的腦殼";
    }

    public override void BuildBody()
    {
      Person.Body = "瘦子的身材";
    }

    public override void BuildArm()
    {
      Person.Head = "瘦子的胳膊";
    }

    public override void BuildLeg()
    {
      Person.Head = "瘦子的腿";
    }
  }

  // 建造者形式中的批示者
  public class PersonDirector
  {
    Builder builder;
    public PersonDirictor(Builder personBuilder)
    {
      builder = personBuilder;
    }

    // 批示創立一小我的進程,並前往創立勝利的產物
    public Person BuildPerson()
    {
      builder.BuildHead();
      builder.BuildBody();
      builder.BuildArm();
      builder.BuildLeg();

      return builder.GetPerson();
    }
  }

4. 形式總結

  4.1 長處

    4.1.1 用戶只須要指定要建造的類型便可以獲得它們,而詳細的建造進程和細節不須要曉得。
    4.1.2 建造代碼與表現相分別,假如要轉變一個產物的外部表現,只需再界說一個新的詳細的建造者便可以了。
    4.1.3 建造進程由批示者來掌握,建造細節由一個籠統類來掌握,關於完成建造細節的詳細類來講,不會漏掉某一個步調。

  4.2 缺陷

    以上例子解釋,如今我要增長產物的一個細節,如把創立腳的進程也添加出去,看我們須要改哪些類。Buider,FatPersonBuilder,ThinPersonBuilder(乃至更多,假如你完成了TallPersonBuilder,ShortPersonBuilder等),PersonDirector,我們對修正也就開放了。

  4.3 適用規模
    4.3.1 當創立龐雜對象的算法應當自力於該對象的構成部門和它們的拆卸方法時。

    4.3.2 當龐雜對象的部件絕對穩固,不會產生變更時

以上就是本文的全體內容,願望能給年夜家一個參考,也願望年夜家多多支撐。

  1. 上一頁:
  2. 下一頁: