小菜學習設計模式(三)—工廠方法(Factory Method)模式
前言
設計模式目錄:
本篇目錄:
其實大家都知道,在工廠方法(Factory Method)模式之前有個簡單工廠模式,也就是靜態工廠方法(Static Factory Method)模式,在簡單工廠模式之前有個我們都熟悉的三層架構模式,那我們就上到下一層一層的來了解下。
三層架構
三層架構我們都熟悉,一開始程式設計的時候也是用的最多,分為:表現層(UI)、業務邏輯層(BLL)、資料訪問層(DAL),實現了“高內聚,低耦合”的思想。
關於三層架構不需要說太多,我當時學習的時候,無意間看到李天平老師關於三層的趣味理解,覺得還蠻有意思的,很適合初學者理解,和大家分享下:
- 資料庫好比豬圈,所有的豬有序地按區域或編號,存放在不同的豬欄裡。
- DAL好比是屠宰場,把豬從豬圈取出來進行(處理)屠殺,按要求取出相應的部位(欄位),或者進行歸類整理(統計),形成整箱的豬肉(資料集),傳送給食品加工廠(BLL)。本來這裡都是同一夥人既管抓豬,又管殺豬的,後來覺得效率太低了,就讓一部分人出來專管抓豬了(DBUtility),根據要求來抓取指定的豬。
- BLL好比食品加工廠,將豬肉深加工成各種可以食用的食品(業務處理)。
- Web好比商場,將食品包裝成漂亮的可以銷售的產品,展現給顧客(UI表現層)。
- 豬肉好比Model,無論是哪個廠(層),各個環節傳遞的本質都是豬肉,豬肉貫穿整個過程。
- 通用類庫Common,相當於工人使用的各種工具,為各個廠(層)提供諸如殺豬刀、繩子、剪刀、包裝箱、工具車等共用的常用工具(類)。其實,每個部門本來是可以自己製作自己的工 具的,但是那樣會使效率比較低,而且也不專業,並且很多工作都會是重複的。因此,就專門有人開了這樣的工廠來製作這些工具,提供給各個工廠,有了這樣的分工,工廠就可以專心做自己的事情了。
通過上面的趣味理解,腦海中應該對三層有個瞭解了。說到這,其實如果大家學習過MVC(模型Model-檢視View-控制器Controller)的話,就發現和三層架構有點相似,都有一個表現層,但是其他兩層就不同了,三層架構中沒有Controller這個概念,MVC也沒有把業務的邏輯訪問看成兩個層,這是採用三層架構或MVC搭建程式最主要的區別。當然了。在三層中也提到了Model,但是三層架構中Model的概念與MVC中Model的概念是不一樣的,“三層”中典型的Model層是以實體類構成的,而MVC裡,則是由業務邏輯與訪問資料組成的。
簡單工廠模式
靜態工廠方法(Static Factory Method)模式其實不屬於GOF所提出的設計模式中,我們一般在應用的時候結合三層模式下使用工廠模式使用多點,例如下面的解決方案:
上面的SeManage.IDAL就相當於抽象產品,SeManage.SQLServerDAL相當於具體產品,SeManage.DALFactory相當於工廠,決定生成何種商品的工廠。
1 /// <summary> 2 /// dal工廠 3 /// </summary> 4 public sealed class DataAccess 5 { 6 private static readonly string SQLServicePath = ConfigurationManager.AppSettings["SQLServerDAL"]; 7 public DataAccess() 8 { } 9 10 /// <summary> 11 /// 建立Changdi資料層介面。 12 /// </summary> 13 public static SeManage.IDAL.IChangdi CreateChangdi() 14 { 15 string className = SQLServicePath + ".Changdi"; 16 return (SeManage.IDAL.IChangdi)Assembly.Load(SQLServicePath).CreateInstance(className); 17 } 18 }
1 <add key="SQLServerDAL" value="SeManage.SQLServerDAL"/>
上面的程式碼表示根據配置檔案來建立何種具體抽象類的例項(產品),下面的配置就像工廠機器的開關,決定生產哪種產品。
通過上面的程式碼,我們也會發現一些問題,如果產品的種類較多,工廠類裡面的生產產品的方法也多,如果出現新的產品,那我們就必須在工廠類裡面新增生產新產品的方法,這樣就違反了高內聚責任分配原則,使程式碼變的不容易維護。
工廠方法(Factory Method)模式
工廠方法(Factory Method)模式是在GOF提出的設計模式中有定義的,如下:為建立物件定義一個介面,讓子類決定例項化哪個類,工廠方法讓一個類的例項化延遲至子類。
其實從某種方面可以說,工廠方法模式是簡單工廠模式的衍生,也解決了簡單工廠模式所出現的問題,例如上面所提到的。工廠方法模式其實就是把工廠抽象化了,我們可以把工廠方法模式拆分成四個元素:抽象工廠(IFactory)、具體工廠(Concrete Factory)、抽象產品(Product)和具體產品(Concrete Product)。根據這四個元素,我們可以簡單的畫下UML類圖:
前言
設計模式目錄:
本篇目錄:
其實大家都知道,在工廠方法(Factory Method)模式之前有個簡單工廠模式,也就是靜態工廠方法(Static Factory Method)模式,在簡單工廠模式之前有個我們都熟悉的三層架構模式,那我們就上到下一層一層的來了解下。
三層架構
三 迪米特 tex 新的 類的設計 package set pre sdn sso
工廠方法屬於創建型設計模式。
設計意圖:定義一個用於創建對象的接口。讓子類決定實例化哪一個類,工廠方法使一個類的實例化延遲到其子類。
靜態工廠使用面向對象的方式,有 上一篇的簡單工廠模式雖然簡單,但是存在一個很嚴重的問題:當系統中需要引入新產品時,由於靜態工廠方法通過所傳入引數的不同來建立不同的產品,這必定要修改工廠類的原始碼,將違背開閉原則。如何實現新增新產品而不影響已有程式碼?工廠方法模式為此應運而生。
工廠方法模式(Factory Method)
學
簡單工廠的嚴重問題:
當系統中需要引進新產品時,靜態工廠方法通過所傳入引數的不同來建立不同的產品,這必定要修改工廠類的原始碼,違背了開閉原則
引入工廠方法模式:
針對不同的產品提供不同的工廠
定義:
定義一個用於建立物件的介面,讓子類決定將 哪一個類例項化,工廠方法迷失
1、使用 setTheme 的方法讓 Activity 重新設定主題;
2、設定 Android
Support Library 中的 UiMode 來支援日間/夜間模式的切換;
3、通過資源 id 對映,回撥自定義 ThemeChangeListener 介
Effective Java中提出了靜態工廠,即不使用產品的constructor來提供產品,靜態工廠不是開發模式,而是一種改進提供例項的策略。
如何實現?
很簡單,靜態工廠方法的定義是:一個返回類的例項的靜態方法
這樣做有什麼好處?
1)靜態工廠方法簽名可讀性強,封裝了不必 轉自:https://www.cnblogs.com/ysyn/p/5563256.html
引言:
專案中遇到關於IOC的一些內容,因為和正常的邏輯程式碼比較起來,IOC有點反常。因此本文記錄IOC的一些基礎知識,並附有相應的簡單例項,而在實際專案中再複雜的應用也只是在 img alt 小夥伴 分享 mage 微信公眾 pcb 相關 持續更新 LVOOP系列轉到微信公眾號持續更新,這裏將同步更新鏈接:https://mp.weixin.qq.com/s/jVMpCbZe46e1bVmrRsbv-w
對LabVIEW感興趣的小夥伴歡迎關註我的
工廠方法模式:定義一個用於建立物件的介面,讓其子類決定例項化哪一個工廠類,工廠模式使其建立過程延遲到子類進行。
優點:1、一個呼叫者想建立一個物件,只要知道其名稱就可以了
1 前言
上篇部落格我們學習了簡單工廠模式,今天我們深入一點,學習一下工廠方法模式。工廠方法模式是在簡單工廠模式的基礎上延伸出來的,只不過把原來的工廠類給抽象出來了,這樣是的工廠類可擴充套件性增強。從而進一步的進行了抽象。
2 詳述
2.1 定義
定義一個用於建立 寫在前面
設計模式目錄:
本篇目錄:
好長時間沒有更新設計模式系列了,不是不想寫,奈何小菜功力有限,這段時間也在給自己充電,畢竟路要一步一步走,急不得。
控制反轉(Inversion of Control)是解決程式耦合問題的一種方案,還有種叫法是依賴注入(Dependency Inj
1 /// <summary>
2 /// 心臟類
3 /// </summary>
4 public class Heart
5 {
6 private int _size;
7 p
1 /// <summary>
2 /// 資料庫操作類
3 /// </summary>
4 public class DbHelperOra
5 {
6 public static bool Quer 前言
設計模式目錄:
本篇目錄:
簡單實現
執行緒安全
後記
單例模式(Singleton)可以說是最簡單的模式,對.net來說,因為不需要考慮到垃圾回收機制,實現起來很簡單,但是對於沒有提供記憶體管理的平臺來說,比如C++,因為單例模式只考慮建立物件,所以 csdn bst 設計 cto mod 基類 load 引用 角色
1. 簡單工廠模式
怎樣理解簡單工廠,工廠方法。 抽象工廠三種設計模式?
簡單工廠的生活場景。賣早點的小攤販。他給你提供包子,饅頭,地溝油烙的煎餅等,小販是一個工廠。它生產包子,饅頭,地溝油烙的 ack cto sys alt 修改 spa 抽象類 .com desc 1、簡介:工廠方法模式是類的創建模式,又叫虛擬構造子模式或是多態性工廠模式,它的實現方式是創建一個工廠接口,將實際創建對象的的工作轉移到工廠子類中,在系統的擴展中,可以在不修改工廠角色的情況下引進新的 log face inf str ace 對象實例 method tee 就是 2018-1-20 by Atlas
應用場景
Template Method Pattern是在父類建立處理邏輯的大綱骨架,而在子類補充具體的處理內容。把Template Method print blog -i pri cnp 三種模式 image void share 工廠方法模式(Factory Method)
工廠模式適合:凡是出現了大量的產品需要創建,並且具有共同的接口時,可以通過工廠方法模式進行創建。在以下的三種模式中,第一種如果傳入的字符串 tor 對象 設計 黃色 post creator log clas 抽象工廠 在簡單工廠模式中通過工廠Factory獲取不同的對象,但是有一個明顯的缺點——簡單工廠模式系統難以擴展!
一旦添加新產品就不得不修改簡單工廠方法,這樣就會造成簡單工廠的實現邏輯過於復雜,
可以通 相關推薦
小菜學習設計模式(三)—工廠方法(Factory Method)模式
跟著實例學習設計模式(3)-工廠方法(創建型)
設計模式的征途—3.工廠方法(Factory Method)模式
設計模式之三:工廠方法模式—多型工廠的實現
Android實現日夜間模式的三種常用方法(一)
Java程式碼優化:靜態工廠方法 Static Factory Method
控制反轉IOC的依賴注入方式 【調侃】IOC前世今生 IoC模式 談談對Spring IOC的理解 一個簡單的小程式演示Unity的三種依賴注入方式 小菜學習設計模式(五)—控制反轉(Ioc) IoC模式(依賴、依賴倒置、依賴注入、控制反轉) IoC模式
LVOOP設計模式在路上(三)-- 工廠方法模式
常用軟體設計模式(三)工廠方法模式
設計模式深入學習IOS版(3)工廠方法模式
小菜學習設計模式(五)—控制反轉(Ioc)
小菜學習設計模式(四)—原型(Prototype)模式
小菜學習設計模式(一)—模板方法(Template)模式
小菜學習設計模式(二)—單例(Singleton)模式
iOS經常使用設計模式——工廠方法(簡單工廠模式,工廠方法模式, 抽象工廠模式)
設計模式(二)---工廠方法模式
設計模式-工廠方法(Factory Method)
Java設計模式-工廠方法模式(Factory Method)
C#設計模式(3)——工廠方法模式(Factory Method)