亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

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

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

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

2 回答

?
holdtom

TA貢獻1805條經驗 獲得超10個贊

不論是工廠模式還是其它創建型模式,都是一個目的——為了初始化一個對象。或者說,為了構建一個數據結構模型(類和對象本身就是一種自定義的數據結構)。

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

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

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

面向對象封裝的本身也就是為了使得對外的 API 盡可能的簡化。

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

比如,這樣:

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;

    }

}

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

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

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


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

TA貢獻2051條經驗 獲得超10個贊

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

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


查看完整回答
反對 回復 2018-08-06
  • 2 回答
  • 0 關注
  • 4543 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號