乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      設計模式學習筆記(四)——Builder生成器模式

       skywood 2007-08-06
       

             Builder生成器模式是一種創(chuàng)建型模式,它主要是應對項目中一些復雜對象的創(chuàng)建工作。所謂“復雜對象”,是只:此對象中還含有其它的子對象。Builder模式所面對的情況是:各個部分的子對象用一定的算法構成;由于需求的變化,這個復雜對象的各個部分經常面臨著劇烈的變化,但是將他們組合在一起的算法卻相對穩(wěn)定。簡單的說:子對象變化較頻繁,對算法相對穩(wěn)定。

             這是解決一個復雜對象的創(chuàng)建工作,現(xiàn)在變化的部分和相對穩(wěn)定的部分已經明確,我們要做的是隔離變化,如何將子對象和算法隔離是要解決的問題。

             《設計模式》中說道:將一個復雜對象的構建與其表示向分離,使得同樣的構建過程可以創(chuàng)建不同的表示。

             我們現(xiàn)在定義一個場景:還是選擇汽車,BMWBORA。試想一下,如果我們用較為普通的寫法可以寫成如下代碼:

      public static void Main()

              {

                  Car car = new Car();

                  Console.Write("Wheel:" + car._wheel + "\n");

                  Console.Write("OilBox:" + car._oilBox + "\n");

                  Console.Write("Body:" + car._body + "\n");

                  Console.Read();

              }

       

              public class Car

              {

                  public string _wheel = BMWWheel;

                  public string _oilbox = BMWOilBox;

                  public string _body = BMWBody;

      }

      當我們不確定或因需求變化而改變對汽車品牌的選擇時,我們也許會頻繁的更改Car類中的實現(xiàn)。

      現(xiàn)在我們用Manager來管理汽車的構建。當然是構建一個抽象的類對象(對象如下圖的builder,抽象類為AbstractBuilder,對于BMWBORA的構建類型繼承AbstractBuilder

       


      首先我們先來編寫
      AbstractBuilder抽象類的實現(xiàn),代碼如下:

      public abstract class AbstractBuilder

          {

              public string _wheel;

              public string _oilBox;

              public string _body;

              public abstract void BuildWheel();

              public abstract void BuildOilBox();

              public abstract void BuildBody();

       

              public abstract Car GetCar();  

          }

       

          public abstract class Car

          {

          }

      然后我們再來實現(xiàn)BMWBORA的構建,也就是Builder模式中頻繁變化的部分,他們都要繼承AbstractBuilder

      BMW

      public class BMWBuilder:AbstractBuilder

          {

              public BMWBuilder()

              {

                  //

                  // TODO: 在此處添加構造函數邏輯

                  //

              }

       

              public override void BuildWheel()

              {

                  _wheel = "BMWWheel";

              }

       

              public override void BuildOilBox()

              {

                  _oilBox = "BMWOilBox";

              }

       

              public override void BuildBody()

              {

                  _body = "BMWBody";

              }

       

              public override Car GetCar()

              {

                  return new BMWCar();

              }

       

          }

       

          public class BMWCar:Car

          {}

      BORA

      public class BORABuilder:AbstractBuilder

          {

              public BORABuilder()

              {

                  //

                  // TODO: 在此處添加構造函數邏輯

                  //

              }

       

              public override void BuildWheel()

              {

                  _wheel = "BORAWheel";

              }

       

              public override void BuildOilBox()

              {

                  _oilBox = "BORAOilBox";

              }

       

              public override void BuildBody()

              {

                  _body = "BORABody";

              }

       

              public override Car GetCar()

              {

                  return new BORACar();

              }

          }

       

          public class BORACar:Car

          {}

      現(xiàn)在我們使用一種Manager方法來管理汽車的構建,這也就是Builder模式中提到的相對穩(wěn)定的算法,我用一個類來實現(xiàn):

      private class CarManager

              {

                  public BuilderClass.Car CreateCar(BuilderClass.AbstractBuilder builder)

                  {

                      builder.BuildBody();

                      builder.BuildOilBox();

                      builder.BuildWheel();

       

                      Console.Write("Wheel:" + builder._wheel + "\n");

                      Console.Write("OilBox:" + builder._oilBox + "\n");

                      Console.Write("Body:" + builder._body + "\n");

                      Console.Read();

                      return builder.GetCar();

                  }

              }

      現(xiàn)在我們可以在客戶程序中調用這個Manager來構建Car

      public static void Main()

              {

                  CarManager manager = new CarManager();

                  BuilderClass.Car car =

      manager.CreateCar(new BuilderClass.BORABuilder());

              }

      結果如下:

      Wheel:BORAWheel

      OilBox:BORAOilBox

      Body:BORABody

      如果我們現(xiàn)在要換成BMW,我們只要在Main()函數中改變manager.CreateCar中的參數就可以:

      public static void Main()

              {

                  CarManager manager = new CarManager();

                  BuilderClass.Car car =  

      manager.CreateCar(new BuilderClass.BMWBuilder());

              }

      結果如下:

      Wheel:BMWWheel

      OilBox:BMWOilBox

      Body:BMWBody

      這樣,經過簡單的修改可以實現(xiàn)對不同Car的構建。如果我們還有其他汽車的實現(xiàn)只要將他的類繼承AbstractBuilder,然后在Main()中修改就可以。說道這里,我想起了在第一篇中提到的設計模式中的“開---閉原則”,這個方式是很符合這個原則的,對代碼進行了擴展,以減少了代碼修改量。而且我們還有很多方法可以利用,如:WebConfig中的appSettings來動態(tài)的配置,從數據庫中讀取,或利用依賴方式動態(tài)生成。

      現(xiàn)在我們再來看看Builder模式的幾個要點:

      Builder模式主要用于構建一個復雜的對象,但這個對象構建的算法是穩(wěn)定的,對象中的各個部分經常變化。Builder模式主要在于應對復雜對象各個部分的頻繁需求變動。但是難以應對算法的需求變動。這點一定要注意,如果用錯了,會帶來很多不必要的麻煩。

      課程中還提到了.Net中的Builder模式的應用。如:Page類中的OnInit()等方法的實現(xiàn)。我們在寫一個Web頁面的時候。他的codebehind代碼都是繼承System.Web.UI.Page基類的。OnInit()函數是可以重寫的

      posted on 2006-05-08 08:57 KiddLee 閱讀(1496) 評論(4)  編輯 收藏 引用 網摘 所屬分類: 設計模式

      FeedBack:
      # 
      引用了你最后一句話,在我的隨筆中。令我茅塞大開,多謝多謝!  回復  更多評論
        
      # re: 設計模式學習筆記(四)——Builder生成器模式  2007-05-15 12:02 Donnyleen
      錯 誤 1 “projectDemo.builder.BMWBuilder”不會實現(xiàn)繼承的抽象成員 “projectDemo.builder.AbstractBuilder.BuildBody()” F:\Documents and Settings\linzhizhong\My Documents\Visual Studio 2005\Projects\projectDemo\projectDemo\builder\BMWBuilder.cs 7 18 projectDemo

      這時為什么  回復  更多評論
        
      # re: 設計模式學習筆記(四)——Builder生成器模式  2007-05-15 17:08 KiddLee
      @Donnyleen
      看看你的代碼中BMWBuilder類下面有沒有實現(xiàn)BuildBody()方法  回復  更多評論
        
      # re: 設計模式學習筆記(四)——Builder生成器模式  2007-05-16 11:07 Donnyleen
      是沒完全實現(xiàn)
      謝了  回復  更多評論
        

        本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報。
        轉藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多