設計模式之工廠模式

2021-08-31 09:20:06 字數 1748 閱讀 6515

工廠模式定義建立物件的介面,但是讓子類去真正的例項化。也就是工廠方法將類的例項化延遲到子類

工廠模式對比其它方式(建構函式)

工廠模式類集中了所有物件的建立,便於物件的建立的統一管理

物件的使用者僅僅是使用產品,實現了單一職責

便於擴充套件,如果新增了一種業務,只需增加相關的業務物件類和工廠類的生產業務物件的方法,不需要修改其他的地方

確實違反了開閉原則

大家都玩過飛機大戰吧,飛機種類太多太多了,其實建構函式去做還不太理想,用工廠模式還是不錯,但是它有乙個弊端,違反了開閉原則

//小飛機

function smallplane()}}

//大飛機

function bigplane()}}

//攻擊飛機

function atackplane()

}this.attack = function()

}//工廠模式

function planefactor(type)

newplane.die = function ()

return newplane;

}

不再有乙個唯一的工廠類就建立產品,而是將不同的產品交給對應的工廠類去實現。每個產品由負責生產的子工廠來創造。如果新增新的產品,需要做的是新增新的子工廠和產品,而不需要修改其他的工廠**。

工廠方法模式組成:

抽象工廠類:負責定義建立產品的公共介面。

產品子工廠:繼承抽象工廠類,實現抽象工廠類提供的介面。

每一種產品有各自的產品類。

**比簡單工廠模式複雜了,引入了抽象層,還有子工廠,這會增加**的複雜度和理解難度。但是相比簡單工廠模式,**的維護性和擴充套件性提高了,新增產品時,只需要增加對應的產品類和產品工廠類,不需要修改到抽象工廠類和其他工廠。更加符合物件導向的開閉原則

//工廠方法模式

function planefactor()

//子類工廠都可以使用的公共方法

planefactor.prototype.touch = function ()

}planefactor.prototype.die = function()

//建立物件的介面

planefactor.create = function (type)

//繼承

if (planefactor.prototype[type].prototype.__proto__ != planefactor.prototype)

var arg = .slice.call(arguments,1)

var newplane = new planefactor.prototype[type](...arg)

return newplane;

}//真正定義子類工廠

planefactor.prototype.smallplane = function (x, y)

planefactor.prototype.bigplane = function (x,y)

planefactor.prototype.atackplane = function (x,y)

}var a = planefactor.create('atackplane',10,20)

var b = planefactor.create('bigplane',20,20)

var c = planefactor.create('smallplane',40,20)

設計模式 設計模式之工廠模式

工廠方法模式 建立模式 使用場景?作用?形態?場景 大量類似的實體類 要建立的實體類都是同一本質的東西 披薩 有部分類似功能 準備 烘烤 切法 實現方式不一樣 準備的材料不同 烘烤時間不同 切法不同 將繁瑣複雜的建立類的過程聚集在一起,有序清晰 把具體例項化的過程從客戶 中抽離 作用 1 將建立物件...

c 設計模式 之 工廠模式之 工廠模式

1 uml類圖 實現和依賴關係 實現 sportfactory jeepfactory hatchbackfactory 實現 ifactory 介面 sportcar jeepcar hatchbackcar 實現 icar 介面 依賴 ifactory 依賴 icar sportfactory ...

設計模式 工廠模式之簡單工廠模式

定義 由乙個工廠物件 工廠類 來指定建立某乙個產品類的例項。使用場景 客戶端只需傳入指定的引數即可,工廠類負責建立的物件較少 因為指定了傳入的引數 介面類 本想用iphone命名的,見諒 public inte ce phone實現介面類 public class huaweiphone imple...