日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

設(shè)計(jì)模式 2/23 工廠模式

 Levy_X 2017-08-31

工廠模式是最常用的設(shè)計(jì)模式之一,用好了,代碼優(yōu)雅,可維護(hù)性高,對系統(tǒng)設(shè)計(jì)會(huì)上一個(gè)臺階

為什么這么說,因?yàn)楣S模式可以牽扯出抽象工廠模式,也有大家都會(huì)聊到的簡單工廠模式

我們要了解一點(diǎn),23中設(shè)計(jì)模式中,不包含簡單工廠模式,之所以大家會(huì)去聊這個(gè),四個(gè)字,漸進(jìn)明細(xì)

通過對簡單工廠模式的了解,我們引入工廠這個(gè)詞,不然一個(gè)寫代碼的,天天給他講工廠,工廠,工廠,西廠,東廠,會(huì)暈

同時(shí),通過逐步的深入,從簡單工廠,到工廠模式,再到抽象工廠,漸進(jìn)明細(xì)的過程,逐步深入的理解,比較優(yōu)劣,擇優(yōu)而為我們所用。

試想我們遇到以下情景,我們該怎么處理

在工作中,我們需要處理不同類型的文件,有音頻的,視頻的,圖片的,文本的。通過程序的處理,我們可以分別提取到不同的信息。

這種情況你準(zhǔn)備怎么處理

工作經(jīng)驗(yàn)少的同學(xué)默默的心理噗嗤一聲,看我5分鐘搞定

class Program { static void Main() { var fileType = 'Video'; switch (fileType) { case 'Video': HandleVideoFile(fileType); break; case 'Audio': HandleAudioFile(fileType); break; case 'Image': HandleImageFile(fileType); break; case 'Text': HandleTextFile(fileType); break; } Console.ReadKey(); } public static void HandleTextFile(string fileType) { Console.WriteLine('我開始處理文本文件了'); } public static void HandleImageFile(string fileType) { Console.WriteLine('我開始處理圖片文件了'); } public static void HandleAudioFile(string fileType) { Console.WriteLine('我開始處理音頻文件了'); } public static void HandleVideoFile(string fileType) { Console.WriteLine('我開始處理視頻文件了'); } }
View Code

各個(gè)方法封裝,獨(dú)立,可隨處調(diào)用,面向?qū)ο笕筇匦?,簡簡單單隨隨便便給你展現(xiàn)一臉

后來,系統(tǒng)變強(qiáng)壯了,業(yè)務(wù)增加了,要求同時(shí)也能處理郵件Email

是不是你這個(gè)時(shí)候開始修改代碼,增加一個(gè)方法,添加一個(gè)case,break;

如果后續(xù)陸陸續(xù)續(xù)好幾十種繼續(xù)增加,怎么辦。程序的可維護(hù)性,可擴(kuò)展性在哪里?

開放-封閉原則在哪里?

開放-封閉原則是只軟件實(shí)體(類,模塊,函數(shù)等等),應(yīng)該可以擴(kuò)展,但是不可修改

拋開所有原則,再增加5個(gè),你這個(gè)類的代碼得有1000行了吧,那么多case,break, 那天稍微不小心的改錯(cuò)一個(gè),是不是會(huì)引起巨震。

所以,我們開始進(jìn)行修改,也就是我們接下來進(jìn)入正題的 簡單工廠模式。

所謂的簡單工廠模式,是將一個(gè)具體類的實(shí)例化交給一個(gè)工廠方法來執(zhí)行

1個(gè)點(diǎn),敲黑板,重點(diǎn)來了

工廠方法來執(zhí)行。首先需要一個(gè)工廠,還需要一個(gè)方法。一個(gè)方法來干嘛?來實(shí)例化具體的類,具體的什么類?具體的算法類!

我們首先來定義一個(gè)抽象類

public abstract class Handle { public abstract void HandleFile(); }
View Code

這個(gè)類告訴全世界,要實(shí)現(xiàn)我,就得實(shí)現(xiàn)我的方法,我們是強(qiáng)關(guān)系,我們是合成關(guān)系,我們是擁有關(guān)系,我們是鳥兒與翅膀的關(guān)系!

而且不準(zhǔn)實(shí)現(xiàn)我,要實(shí)現(xiàn),先繼承,要繼承,就得override我的所有方法

于是,不得已,要處理的類紛紛開始實(shí)現(xiàn)

文件處理類

/// <summary> /// 文本處理類 /// </summary> public class TextHandle : Handle { public override void HandleFile() { Console.WriteLine('我開始處理文本文件了'); } }
View Code

圖片處理類

/// <summary> /// 圖片處理類 /// </summary> public class ImageHandle : Handle { public override void HandleFile() { Console.WriteLine('我開始處理圖片文件了'); } }
View Code

視頻處理類

/// <summary> /// 視頻處理類 /// </summary> public class VideoHandle : Handle { public override void HandleFile() { Console.WriteLine('我開始處理視頻文件了'); } }
View Code

音頻處理類

/// <summary> /// 音頻處理類 /// </summary> public class AudioHandle : Handle { public override void HandleFile() { Console.WriteLine('我開始處理音頻文件了'); } }
View Code

所有的處理類我們定義好了,如果后續(xù),業(yè)務(wù)變更,需求增加,再添加什么郵件啊,電話啊,其他什么的,我們只需要繼續(xù)添加我們的類,而不是通過去添加方法,這樣每個(gè)類的單一職責(zé)原則是不是體現(xiàn)的很淋漓盡致了,如果單一職責(zé)覺得太書面,我們換個(gè)稱呼,單一功能原則!沒法再簡單了

所有的處理類已經(jīng)Ready了,我們的重點(diǎn)工廠可以開始修建了

public class HandleFactory { public Handle CreateHandle(string fileType) { Handle handle = null; switch (fileType) { case 'Video': handle = new VideoHandle(); break; case 'Audio': handle = new AudioHandle(); break; case 'Image': handle = new ImageHandle(); break; case 'Text': handle = new TextHandle(); break; } return handle; } }
View Code

不要指指點(diǎn)點(diǎn),不要指指點(diǎn)點(diǎn),不要指指點(diǎn)點(diǎn)

我們就像項(xiàng)目過程一樣,漸進(jìn)明細(xì)

這次介紹的是簡單工廠模式,簡單工廠重點(diǎn)是 簡單,工廠

后續(xù)增加業(yè)務(wù)的時(shí)候,我們只需要再加case,和對應(yīng)的Handle類就好了

如何調(diào)用呢

class Program { static void Main() { var handleFactory = new HandleFactory(); var fileType = 'Text'; var handle = handleFactory.CreateHandle(fileType); handle.HandleFile(); } }
View Code

是不是一下簡單明了,你要是Web程序,可以,要是CS程序,可以,要是WebAPI,也可以

易擴(kuò)展,可維護(hù)

 

總結(jié)下

優(yōu)點(diǎn)

1、擴(kuò)展性高,如果想增加一個(gè)處理方式,只要擴(kuò)展一個(gè)處理類就可以。

2、屏蔽實(shí)現(xiàn),只關(guān)心處理的結(jié)果

3、帶你走進(jìn)工廠模式

缺點(diǎn)

1、每次增加一個(gè)處理對象的時(shí)候,都需要增加一個(gè)處理類,還要同時(shí)告訴工廠,增加處理類型

2、增加了系統(tǒng)具體類的依賴

 

以上就是關(guān)于簡單工廠模式的分享

一路前行,風(fēng)雨無阻,不定時(shí)更新

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

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多