概念設計模式
工廠模式是用工廠方法代替new操做的一種模式。工廠方法封裝了多個相關聯類的new方法,每次實例化這些類的時候不須要new屢次,只須要調用工廠類的對應方法便可實例化這些類,而且是經過使用一個共同的接口來指向新建立的對象。框架
分類spa
工廠模式分爲三種: 簡單工廠、工廠方法、抽象工廠;設計
簡單工廠對象
用來生產同一等級結構中的任意產品。(不支持拓展增長產品)繼承
簡單工廠模式分爲三種接口
一、工廠類角色:這是本模式的核心,含有必定的商業邏輯和判斷邏輯,根據邏輯不通,產生具體的工廠產品。產品
二、抽象產品角色:它通常是具體產品繼承的父類或者實現的接口。擴展
三、具體產品角色:工廠類所建立的對象就是此角色的實例。開源框架
工廠方法
用來生產同一等級結構中的固定產品。(支持拓展增長產品)
工廠方法模式的組成:
1.抽象工廠角色: 這是工廠方法模式的核心,它與應用程序無關。是具體工廠角色必須實現的接口或者必須繼承的父類。
2.具體工廠角色:它含有和具體業務邏輯有關的代碼。由應用程序調用以建立對應的具體產品的對象。
3.抽象產品角色:它是具體產品繼承的父類或者是實現的接口。
4.具體產品角色:具體工廠角色所建立的對象就是此角色的實例。
抽象工廠
用來生產不一樣產品族的所有產品。(不支持拓展增長產品;支持增長產品族)
抽象工廠模式的用意爲:給客戶端提供一個接口,能夠建立多個產品族中的產品對象。
並且使用抽象工廠模式還要知足一下條件:
1.系統中有多個產品族,而系統一次只可能消費其中一族產品
2.同屬於同一個產品族的產品以其使用。
總結:
工廠方法模式是簡單工廠模式的延伸,它繼承了簡單工廠模式的優勢,同時還彌補了簡單工廠模式的不足。
工廠方法模式是使用頻率最高的設計模式之一,是不少開源框架和API類庫的核心模式。
在工廠方法模式中,工廠方法用來建立客戶所須要的產品,同時還向客戶隱藏了哪一種具體產品類將被實例化這一細節,用戶只須要關心所需產品對應的工廠,無須關心建立細節,甚至無須知道具體產品類的類名。
基於工廠角色和產品角色的多態性設計是工廠方法模式的關鍵。它可以讓工廠能夠自主肯定建立何種產品對象,而如何建立這個對象的細節則徹底封裝在具體工廠內部。工廠方法模式之因此又被稱爲多態工廠模式,就正是由於全部的具體工廠類都具備同一抽象父類。
使用工廠方法模式的另外一個優勢是在系統中加入新產品時,無須修改抽象工廠和抽象產品提供的接口,無須修改客戶端,也無須修改其餘的具體工廠和具體產品,而只要添加一個具體工廠和具體產品就能夠了,這樣,系統的可擴展性也就變得很是好,徹底符合「開閉原則」。