欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
設計模式學(xué)習筆記(四)——Builder生成器模式
 

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

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

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

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

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;

}

當我們不確定或因需求變化而改變對汽車(chē)品牌的選擇時(shí),我們也許會(huì )頻繁的更改Car類(lèi)中的實(shí)現。

現在我們用Manager來(lái)管理汽車(chē)的構建。當然是構建一個(gè)抽象的類(lèi)對象(對象如下圖的builder,抽象類(lèi)為AbstractBuilder,對于BMWBORA的構建類(lèi)型繼承AbstractBuilder類(lèi)

 


首先我們先來(lái)編寫(xiě)AbstractBuilder抽象類(lèi)的實(shí)現,代碼如下:

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

    {

    }

然后我們再來(lái)實(shí)現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

    {}

現在我們使用一種Manager方法來(lái)管理汽車(chē)的構建,這也就是Builder模式中提到的相對穩定的算法,我用一個(gè)類(lèi)來(lái)實(shí)現:

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();

            }

        }

現在我們可以在客戶(hù)程序中調用這個(gè)Manager來(lái)構建Car

public static void Main()

        {

            CarManager manager = new CarManager();

            BuilderClass.Car car =

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

        }

結果如下:

Wheel:BORAWheel

OilBox:BORAOilBox

Body:BORABody

如果我們現在要換成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

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

現在我們再來(lái)看看Builder模式的幾個(gè)要點(diǎn):

Builder模式主要用于構建一個(gè)復雜的對象,但這個(gè)對象構建的算法是穩定的,對象中的各個(gè)部分經(jīng)常變化。Builder模式主要在于應對復雜對象各個(gè)部分的頻繁需求變動(dòng)。但是難以應對算法的需求變動(dòng)。這點(diǎn)一定要注意,如果用錯了,會(huì )帶來(lái)很多不必要的麻煩。

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

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

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

這時(shí)為什么  回復  更多評論
  
# re: 設計模式學(xué)習筆記(四)——Builder生成器模式  2007-05-15 17:08 KiddLee
@Donnyleen
看看你的代碼中BMWBuilder類(lèi)下面有沒(méi)有實(shí)現BuildBody()方法  回復  更多評論
  
# re: 設計模式學(xué)習筆記(四)——Builder生成器模式  2007-05-16 11:07 Donnyleen
是沒(méi)完全實(shí)現
謝了  回復  更多評論
  
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
設計模式-建造者模式詳解
博客園 - 探索設計模式(七):創(chuàng )建型模式專(zhuān)題總結(Creational Pattern)
生成器模式(Builder Pattern)
C#設計模式系列:建造者模式(Builder)
設計模式-創(chuàng )建型-建造者模式
設計模式——構造者模式
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久