第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

實際開發(fā)中哪些場景需要用到工廠模式?

實際開發(fā)中哪些場景需要用到工廠模式?

肥皂起泡泡 2018-08-03 10:50:34
工廠方法模式可以允許系統(tǒng)在不修改工廠角色的情況下引進新產(chǎn)品。工廠模式簡單工廠模式抽象工廠模式請問實際開發(fā)中哪些情況下會用到它?為什么我感覺我現(xiàn)在開發(fā)很少會用到這些設(shè)計模式啊。。。
查看完整描述

2 回答

?
holdtom

TA貢獻1805條經(jīng)驗 獲得超10個贊

不論是工廠模式還是其它創(chuàng)建型模式,都是一個目的——為了初始化一個對象?;蛘哒f,為了構(gòu)建一個數(shù)據(jù)結(jié)構(gòu)模型(類和對象本身就是一種自定義的數(shù)據(jù)結(jié)構(gòu))。

那么,問題來了,為什么有 new 這樣方式可以創(chuàng)建一個對象,還要使用設(shè)計模式。本質(zhì)上就是一個原因,不想讓上層使用者直接使用 new 來初始化對象。

這樣的原因有很多,絕大多數(shù)原因就是對上層的使用者隔離對象創(chuàng)建的過程;或者是對象創(chuàng)建的過程復雜,使用者不容易掌握;或者是對象創(chuàng)建要滿足某種條件,這些條件是業(yè)務的需求也好,是系統(tǒng)約束也好,沒有必要讓上層使用者掌握,增加別人開發(fā)的難度。

所以,到這時我們應該清楚了,無論是工廠模式,還是上面的戰(zhàn)友說的開閉原則,都是為了隔離一些復雜的過程,使得這些復雜的過程不向外暴露,如果暴露了這些過程,會對使用者增加麻煩,這也就是所謂的團隊合作。

面向?qū)ο蠓庋b的本身也就是為了使得對外的 API 盡可能的簡化。

例如,你定義了一個 Status字段,但這個字段因為某些業(yè)務原因,需要使用整數(shù)來表示狀態(tài)。那么,如果數(shù)字少了還好辦,如果數(shù)字多了,上層使用者就不一定能記清楚每個數(shù)字代表的狀態(tài)(比如你要做語音通信系統(tǒng),那么,語音設(shè)備是有很多狀態(tài)數(shù)字的)。這時,如果使用 new來創(chuàng)建對象,然后再對 Status 進行賦值,不可避免的,可能要查閱開發(fā)文檔,或者會不小心給出一個錯誤的值。這時,你就不妨使用工廠模式,或者其它合適的設(shè)計模式,來進行代碼的建設(shè)。

比如,這樣:

public static class Factory

{

    public static Ixxxxxx CreateWithOpen()

    {

        var obj = new Obj();

        obj.Status = 1;

        return obj;

    }

    public static Ixxxxxx CreateWithClose()

    {

        var obj = new Obj();

        obj.Status = 2;

        return obj;

    }

}

當然,使用枚舉也行,這個說白了,就是看設(shè)計者的意愿了。

所以,設(shè)計模式?jīng)]有說必需在哪個場景中使用,更確切的說,應該是,當你使用了設(shè)計模式,能不能為你的團隊成員帶來方便,或者提升代碼質(zhì)量,避免一些錯誤。如果是,就用,如果僅僅帶來了復雜,并沒有益處,那還是算了。

一句話,沒有該不該用,也沒有哪些需要不需要用,用就要帶來效益,無論是對團隊還是產(chǎn)品質(zhì)量或產(chǎn)品的可維護性。用不用,要以團隊配合和產(chǎn)品為導向,這才是對一個軟件設(shè)計師的基本要求。


查看完整回答
1 反對 回復 2018-08-06
?
侃侃無極

TA貢獻2051條經(jīng)驗 獲得超10個贊

我先說下 我目前看到用到了工廠模式的例子:

一般的MVC框架中,都有一個基本的DB數(shù)據(jù)庫基本操作類
我叫它DB class,有一個baseModel class 去繼承 db class
baseModel 是所有框架model的基類,需要繼承baseModel
baseModel已經(jīng)有db類的 增刪查改的方法了,baseModel其實就是數(shù)據(jù)庫工廠,不同的模型繼承baseModel,就有操作不同數(shù)據(jù)表的對象實例了,這樣就用一個基礎(chǔ)的class 完成了實例化各個不同數(shù)據(jù)表的對象,就好像是工廠一樣,傳不同的表名字就返回給你不同的對象。
我的理解就是這樣的,如有誤,還請包涵和斧正。


查看完整回答
反對 回復 2018-08-06
  • 2 回答
  • 0 關(guān)注
  • 4567 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號