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

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

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

開(kāi)通VIP
設計模式學(xué)習筆記(五)——FactoryMethod工廠(chǎng)模式 - KiddLee - 博客園

       剛開(kāi)始接觸設計模式時(shí)就常常聽(tīng)到同事提起工廠(chǎng)模式,那時(shí)也看過(guò)一些人寫(xiě)的Blog,但是往往把注意力放在代碼的編寫(xiě)上。在這段時(shí)間的學(xué)習中慢慢體會(huì )到設計模式是用來(lái)解決一類(lèi)問(wèn)題,而不是某些固定的代碼片段。換句話(huà)說(shuō)是解決問(wèn)題的思想。設計模式可以解決模塊的耦合關(guān)系,可以解決因需求變動(dòng)帶來(lái)的問(wèn)題。程序在第一次編寫(xiě)時(shí),各個(gè)模塊之間可能是緊耦合,但是經(jīng)過(guò)代碼重構,可以將模塊之間變?yōu)樗神詈?。當然,我覺(jué)得我們也可以在軟件設計之初把變化考慮到其中,對于業(yè)務(wù)型軟件設計,在了解需求后,可以盡可能將其分出主次關(guān)系。也就是主體與枝節的關(guān)系。如下圖


       對于工廠(chǎng)模式來(lái)說(shuō),要求高層模塊變化相對較慢,底層模塊變化相對較快。這樣符合設計模式中的依賴(lài)倒置原則——高層模塊不依賴(lài)于底層模塊。換句話(huà)說(shuō),軟件設計是要劃分易變部分和穩定部分。這樣在一些枝節問(wèn)題發(fā)生變化時(shí),主干不用變化。如果是緊耦合狀態(tài),有可能造成一個(gè)地方變化,連帶著(zhù)很多地方要發(fā)生變化。

       工廠(chǎng)模式要解決的是“某個(gè)對象”的創(chuàng )建工作,由于需求的變化,這個(gè)對象常常面臨著(zhù)劇烈的變化,但是這個(gè)對象擁有的接口相對穩定。也就是說(shuō):枝節常常發(fā)生變化,但是枝節與主干的接口相對穩定。

       《設計模式》中是這樣說(shuō)明:定義一個(gè)用于創(chuàng )建對象的接口,讓子類(lèi)決定實(shí)例化那個(gè)類(lèi)。FactoryMethod使得一個(gè)類(lèi)的實(shí)例化延遲到子類(lèi)。

       現在看這句話(huà)可能有些不明白,我們一會(huì )再來(lái)分析一下。先來(lái)看看工廠(chǎng)模式的大體結構。如下圖:


       我們還是用實(shí)例化汽車(chē)的例子來(lái)解釋。對于客戶(hù)端程序(ClientApp)如果想要一個(gè)汽車(chē)的對象,需要調用生產(chǎn)這個(gè)汽車(chē)的Factory的對象。當然,這個(gè)類(lèi)繼承自一個(gè)AbstractFactory基類(lèi)。而這個(gè)Factory類(lèi)就是《設計模式》中提到的“子類(lèi)”,它來(lái)決定實(shí)例化那個(gè)類(lèi)。

       下面我們來(lái)具體實(shí)現一下代碼,首先,我們需要兩個(gè)基類(lèi),一個(gè)是Car的,一個(gè)是Factory的。Factory類(lèi)型的作用是構建Car的對象。代碼如下:

public abstract class AbstractCar

    {

        public abstract string Run();

        public abstract string Stop();

        public abstract string Accelerate();

        public abstract string Decelerate();

    }

 

    public abstract class AbstractFactory

    {

        public abstract AbstractCar CreateCar();

    }

    下面,我們來(lái)做一個(gè)BMW的實(shí)現代碼:

public class BMWCar:AbstractCar

    {

        public override string Run()

        {

            return "BMW Run";

        }

 

        public override string Stop()

        {

            return "BMW Stop";

        }

 

        public override string Accelerate()

        {

            return "BMW Accelerate";

        }

 

        public override string Decelerate()

        {

            return "BMW Decalerate";

        }

    }

 

    public class BMWFactory:AbstractFactory

    {

        public override AbstractCar CreateCar()

        {

            return new BMWCar();

        }

    }

這樣我們就可以在客戶(hù)端程序得到一個(gè)BMW的實(shí)例,并使用它的方法:

class Class1

    {

        /// <summary>

        /// 應用程序的主入口點(diǎn)。

        /// </summary>

        [STAThread]

        static void Main(string[] args)

        {

            AbstractCar car = CreateCarFunc(new BMWFactory ());

            Console.Write(car.Run() + "\n");

            Console.Write(car.Stop() + "\n");

            Console.Write(car.Accelerate() + "\n");

            Console.Write(car.Decelerate() + "\n");

            Console.Read();

        }

 

        public static AbstractCar CreateCarFunc(AbstractFactory factory)

        {

            return factory.CreateCar();

        }

}

在客戶(hù)端程序中,我們AbstractFactory的對象來(lái)得到Car的對象

結果如下:

BMW Run

BMW Stop

BMW Accelerate

BMW Decalerate

如果我們需求變了,現在要BORA的對象,那末,我們首先要對程序作一下擴展,先加入BOARCar類(lèi)和Factory類(lèi),代碼如下:

public class BORACar:AbstractCar

    {

        public override string Run()

        {

            return "BORA Run";

        }

 

        public override string Stop()

        {

            return "BORA Stop";

        }

 

        public override string Accelerate()

        {

            return "BORA Accelerate";

        }

 

        public override string Decelerate()

        {

            return "BORA Decelerate";

        }

    }

 

    public class BORAFactory:AbstractFactory

    {

        public override AbstractCar CreateCar()

        {

            return new BORACar();

        }

}

在客戶(hù)端程序中,我們只要稍作修改,將BMWFactory的實(shí)例化變?yōu)?span lang="EN-US">BORAFactory的實(shí)例化就可以,代碼如下:

class Class1

    {

        /// <summary>

        /// 應用程序的主入口點(diǎn)。

        /// </summary>

        [STAThread]

        static void Main(string[] args)

        {

            AbstractCar car = CreateCarFunc(new BORAFactory());

            Console.Write(car.Run() + "\n");

            Console.Write(car.Stop() + "\n");

            Console.Write(car.Accelerate() + "\n");

            Console.Write(car.Decelerate() + "\n");

            Console.Read();

        }

 

        public static AbstractCar CreateCarFunc(AbstractFactory factory)

        {

            return factory.CreateCar();

        }

}

得到的結果是:

BORA Run

BORA Stop

BORA Accelerate

BORA Decelerate

Factory Method的幾個(gè)要點(diǎn):

1、Factory Method模式主要用于隔離類(lèi)對象的使用者和具體類(lèi)型之間的耦合關(guān)系。面對一個(gè)經(jīng)常變化的具體類(lèi)型,緊耦合關(guān)系會(huì )導致軟件的脆弱。

2、Factory Method模式通過(guò)面向對象的手法,將所要創(chuàng )建的對象工作延遲到子類(lèi),從而實(shí)現一種擴展的策略,較好的解決了這種緊耦合關(guān)系。

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

FeedBack:
# 
圖中抽象類(lèi)的名稱(chēng)應該用斜體吧?  回復  更多評論
  
# re: 設計模式學(xué)習筆記(五)——FactoryMethod工廠(chǎng)模式 2006-05-15 09:38 bisou.cn
一直弄不清楚 抽象工廠(chǎng) 和工廠(chǎng)模式 兩種設計模式,學(xué)習的時(shí)候教程上就說(shuō)兩個(gè)容易混淆,可我還是混淆了。

我感覺(jué) 抽象工廠(chǎng)主要是針對類(lèi)的
工廠(chǎng)模式 主要針對類(lèi)里面的方法的!

在實(shí)際應用中大多都同時(shí)用到這兩種設計模式。比如微軟寫(xiě)的那個(gè)操作數據庫的。

不知道這樣理解對不?

繼續關(guān)注中!  回復  更多評論
  
# re: 設計模式學(xué)習筆記(五)——FactoryMethod工廠(chǎng)模式 2006-05-15 12:56 Bruce Lee
抽象工廠(chǎng)是解決系列對象
工廠(chǎng)模式是解決單個(gè)對象  回復  更多評論
  
# re: 設計模式學(xué)習筆記(五)——FactoryMethod工廠(chǎng)模式 2006-05-15 12:56 kid_li
@bisou.cn
謝謝你的提醒,以后畫(huà)圖時(shí),我會(huì )注意的。對于抽象工廠(chǎng)和工廠(chǎng)方法的區別我們可以從他們針對的問(wèn)題來(lái)判斷:
抽象工廠(chǎng)模式:是解決“系列對象”的需求變化
工廠(chǎng)方法模式:是解決“單個(gè)對象”的需求變化  回復  更多評論
  
# re: 設計模式學(xué)習筆記(五)——FactoryMethod工廠(chǎng)模式 2006-05-16 10:01 bisou.cn
希望樓主繼續寫(xiě)
更加平易近人的

支持并關(guān)注中  回復  更多評論
  
# re: 設計模式學(xué)習筆記(五)——FactoryMethod工廠(chǎng)模式 2006-05-16 10:56 共享精神
看是看懂了,但是不知道具體為SM要這樣寫(xiě),也許以后在項目中應用的時(shí)候.
就能明白其中的奧妙!
感謝樓主的好文章!  回復  更多評論
  
# re: 設計模式學(xué)習筆記(五)——FactoryMethod工廠(chǎng)模式 2006-09-29 16:10 showmi
好文章,但還沒(méi)看抽象工廠(chǎng)模式  回復  更多評論
  
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
【新提醒】【設計模式深入學(xué)習
設計模式-創(chuàng )建型-抽象工廠(chǎng)模式
設計模式-----橋接模式(Bridge Pattern)
工廠(chǎng)方法模式(Factory Method Pattern)
博客園 - 探索設計模式(七):創(chuàng )建型模式專(zhuān)題總結(Creational Pattern)
C#設計模式(4)-Simple Factory Pattern 呂
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

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