摘要:工廠設計模式工廠設計模式顧名思義就是生產對象的工廠在這里需要注意的是生產的對象都是同一規格的具有某些相同的特性否則工廠模式的意義蕩然無存接口在工廠模式中有著重要的作用如果對生產的對象不實現某個接口試問我們為什么還要工廠模式工廠模式使得我們創
工廠設計模式
工廠設計模式, 顧名思義就是生產對象的工廠, 在這里需要注意的是生產的對象都是同一規格的, 具有某些相同的特性, 否則工廠模式的意義蕩然無存簡單工廠
接口在工廠模式中有著重要的作用, 如果對生產的對象不實現某個接口, 試問我們為什么還要工廠模式, 工廠模式使得我們創建的所有事例可以一視同仁, 屏蔽了不同對象的區別, 因為他們實現的同樣的接口
簡單工廠就是工廠所生產的產品雖然都符合接口規范, 但產品無法分類, 這里簡單舉一個商店出售自行車的例子, 則所生產的自行車都實現了自行車的規范, 但自行車無法分辨廠家
let BicycleShop = (function () { /* BicycleFactory namespace. */ let BicycleFactory = { createBicycle: function(model) { let bicycle; switch(model) { case "The Speedster": bicycle = new Speedster(); break; case "The Lowrider": bicycle = new Lowrider(); break; case "The Comfort Cruiser": default: bicycle = new ComfortCruiser(); } Interface.ensureImplements(bicycle, Bicycle); return bicycle; } }; /* BicycleShop class, improved. */ let BicycleShop = function() {}; BicycleShop.prototype = { sellBicycle: function(model) { var bicycle = BicycleFactory.createBicycle(model); bicycle.assemble(); bicycle.wash(); return bicycle; } }; return BicycleShop; })();
/* The Bicycle interface. */ var Bicycle = new Interface("Bicycle", ["assemble", "wash", "ride", "repair"]); /* Speedster class. */ var Speedster = function() { // implements Bicycle ... }; Speedster.prototype = { assemble: function() { ... }, wash: function() { ... }, ride: function() { ... }, repair: function() { ... } }; /* Usage. */ var californiaCruisers = new BicycleShop(); var yourNewBike = californiaCruisers.sellBicycle("The Speedster");
簡單工廠的弊端在于所有的對象都有工廠類來實現, 無法對對象分類, 降低了拓展性, 比如如果有膜拜自行車專賣店和ofo自行車專賣店呢, 所以簡單的業務簡單工廠就夠了, 如果面對復雜業務邏輯則需要抽象工廠模式抽象工廠
真正的工廠模式與簡單工廠區別在于, 它不是使用工廠類來生產對象的, 而是使用其子類, 將其成員對象的實例化推遲到子類中, 這樣就可以對自行車進行分類, 例如工廠類為接口或抽象類, 膜拜自行車工廠和ofo自行車工廠為子類, 當然這兩家的自行車都實現了自行車接口, 下面如圖所示;
首先定義一個工廠類
var BicycleShop = (function() { let BicycleShop = function() {}; BicycleShop.prototype = { sellBicycle: function(model) { var bicycle = this.createBicycle(model); return bicycle; }, createBicycle: function(model) { throw new Error("Unsupported operation on an abstract class."); } }; return BicycleShop })();
然后定義多個繼承工廠類的基于分類的類
let AcmeBicycleShop = (function() { /* AcmeBicycleShop class. */ let AcmeBicycleShop = function() {}; extend(AcmeBicycleShop, BicycleShop); AcmeBicycleShop.prototype.createBicycle = function(model) { let bicycle; switch(model) { case "The Speedster": bicycle = new AcmeSpeedster(); break; case "The Lowrider": bicycle = new AcmeLowrider(); break; case "The Flatlander": bicycle = new AcmeFlatlander(); break; case "The Comfort Cruiser": default: bicycle = new AcmeComfortCruiser(); } Interface.ensureImplements(bicycle, Bicycle); return bicycle; }; return AcmeBicycleShop })(); var GeneralProductsBicycleShop = (function() { /* GeneralProductsBicycleShop class. */ let GeneralProductsBicycleShop = function() {}; extend(GeneralProductsBicycleShop, BicycleShop); GeneralProductsBicycleShop.prototype.createBicycle = function(model) { let bicycle; switch(model) { case "The Speedster": bicycle = new GeneralProductsSpeedster(); break; case "The Lowrider": bicycle = new GeneralProductsLowrider(); break; case "The Flatlander": bicycle = new GeneralProductsFlatlander(); break; case "The Comfort Cruiser": default: bicycle = new GeneralProductsComfortCruiser(); } Interface.ensureImplements(bicycle, Bicycle); return bicycle; }; })();
最后使用
/* Usage. */ var alecsCruisers = new AcmeBicycleShop(); var yourNewBike = alecsCruisers.sellBicycle("The Lowrider"); var bobsCruisers = new GeneralProductsBicycleShop(); var yourSecondNewBike = bobsCruisers.sellBicycle("The Lowrider");
抽象工廠模式可以把公共代碼放在父類中, 個體性的代碼放在子類中, 責任分離的同時提高拓展性
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/107360.html
摘要:抽象工廠模式可以向客戶端提供一個接口,使客戶端在不必指定產品的具體的情況下,創建多個產品族中的產品對象。前邊的兩個都是直接生產實例的,開始以為抽象工廠也是但是后來發現抽象工廠更像是生產工廠,其實抽象工廠其實是實現子類繼承父類的方法。 創建型模式 創建型模式是對一個類的實例化過程進行了抽象,把對象的創建和對象的使用進行了分離 上一篇介紹了下單例模式,這一篇介紹一下工廠模式和抽象工廠模式,...
摘要:參考文章深入理解三種工廠模式工廠模式,工廠方法模式,抽象工廠模式詳解工廠模式是中最常用的設計模式之一。這種類型的設計模式屬于創建型模式,它提供了一種創建對象的最佳方式。 參考文章:深入理解java三種工廠模式工廠模式,工廠方法模式,抽象工廠模式 詳解 工廠模式(Factory Pattern)是 Java 中最常用的設計模式之一。這種類型的設計模式屬于創建型模式,它提供了一種創建對象的...
摘要:抽象工廠模式抽象工廠是工廠模式的升級版,他用來創建一組相關或者相互依賴的對象。代碼抽象工廠模式抽象工廠的優點抽象工廠模式除了具有工廠方法模式的優點外,最主要的優點就是可以在類的內部對產品族進行約束。 抽象工廠模式 抽象工廠是工廠模式的升級版,他用來創建一組相關或者相互依賴的對象。上節學習了工廠模式,類的創建依賴工廠類,程序需要擴展時,我們必須創建新的工廠類。工廠類是用來生產產品的,那我...
摘要:簡單工廠模式簡單工廠模式又叫靜態工廠模式,由一個工廠對象決定創建某一種產品對象類的實例。工廠方法模式工廠方法模式的本意是將實際創建對象的工作推遲到子類中,這樣核心類就變成了抽象類。抽象工廠模式一般用在 1 什么是工廠模式? 工廠模式是用來創建對象的一種最常用的設計模式。我們不暴露創建對象的具體邏輯,而是將將邏輯封裝在一個函數中,那么這個函數就可以被視為一個工廠。工廠模式根據抽象程度的不...
摘要:簡單工廠模式簡單工廠模式又叫靜態工廠模式,由一個工廠對象決定創建某一種產品對象類的實例。工廠方法模式工廠方法模式的本意是將實際創建對象的工作推遲到子類中,這樣核心類就變成了抽象類。抽象工廠模式一般用在 1 什么是工廠模式? 工廠模式是用來創建對象的一種最常用的設計模式。我們不暴露創建對象的具體邏輯,而是將將邏輯封裝在一個函數中,那么這個函數就可以被視為一個工廠。工廠模式根據抽象程度的不...
閱讀 1599·2021-11-02 14:48
閱讀 3651·2019-08-30 15:56
閱讀 2767·2019-08-30 15:53
閱讀 3208·2019-08-30 14:09
閱讀 3094·2019-08-30 12:59
閱讀 2853·2019-08-29 18:38
閱讀 2693·2019-08-26 11:41
閱讀 2209·2019-08-23 16:45