設計模式之 工廠系列 02

2021-09-19 16:06:38 字數 3904 閱讀 8474

package com.learn.abstractfactory;

/** * 現在我們假設這麼乙個東西,這個人不僅開著車,

* 還拿著**,比如說他拿著一把ak47,

* 這個人不僅開著car,手持ak47,

* 這個人手上控制的產品非常多,

* 他開著car,手持ak47,嘴裡叼著蘋果

* 一路哼著歌,奔著東北而去了

* 這個人手裡頭控制著一系列產品

* 如果我想控制這一系列產品的隨時替換,

* 我該怎麼辦?比如舉個實際點的列子

* 你家搞裝修,現在還要賣整體廚房,

* 油煙機也是他的,這個地板也是他的,

* 熱水器也是他的,微波爐也是他的,

* 你能不能做到說把一系列產品替換掉的話就全給替換掉了

* 這就好玩了,這件事情該怎麼做呢

* 其實根據我給大家的例子,

* 我是不是有乙個工廠一下子可以產生一系列產品

* 這樣我在test裡面所有的東西我都不去new他了

* @author leon.sun

* */

public class test

}

package com.learn.abstractfactory;

/** * car不去實現任何的介面了,也不管單例了

* 這是我們最原始的狀態

* @author leon.sun

* */

public class car extends vehicle

}

package com.learn.abstractfactory;

/** * 我們具體的子類,比如ak47

* 應該是從weapon繼承

* 這樣我們的ak47的工廠createweapon的方法去產生ak47了

* @author leon.sun

* */

public class ak47 extends weapon

}

package com.learn.abstractfactory;

/*** 拿到水果的名稱

* 簡單起見就列印他的名字

*/public void printname()

}

package com.learn.abstractfactory;

/** * 由他來產生具體的東西,

* 比如他可以產生乙個car,

* 他可以產生一系列產品

* 讓這兩個具體的factory從abstractfactory繼承

* @author leon.sun

* */

public class defaultfactory extends abstractfactory

@override

public weapon createweapon()

@override

public food createfood()

// public car createcar()

/*** 他可以產生槍ak47

*/// public ak47 createak47()

/***/

// }

}

package com.learn.abstractfactory;

/** * 魔法世界的工廠

* 既然你是從abstractfactory繼承

* 所以需要去是實現他的方法

* 讓他自己來幫我生成

* @author leon.sun

* */

public class magicfactory extends abstractfactory

@override

public weapon createweapon()

/*** 產生毒蘑菇

*/@override

public food createfood()

/*** 他產生的交通工具永遠都是掃帚

*/// public broom createbroom()

/*** 由他來產生**

* 魔法世界產生的**應該叫魔法棒

*/// public magicstick createmagicstick()

/*** 他還可以產生第三系列的產品

* 魔法世界產生的食品蘑菇

*/// public mushroom createmushroom()

}

package com.learn.abstractfactory;

/** * 乙個簡單的broom

* @author leon.sun

* */

public class broom extends vehicle

}

package com.learn.abstractfactory;

public class magicstick extends weapon

}

package com.learn.abstractfactory;

/** * 他應該從food繼承

* @author leon.sun

* */

public class mushroom extends food

}

package com.learn.abstractfactory;

/** * 抽象工廠

* 他當然有產生系列產品的方法

* * 我們現在有一大堆的產品

* 我們有乙個vehicle交通工具

* food食品,有乙個weapon**

* 然後在他們的下面有乙個又乙個的子類

* 他們下面有子類去實現他

* 現在我們乙個工廠就能夠產生一系列的產品

* 這個工廠很好玩,一下子就能產生好多產品

* 他可以產1系列的工廠

* 當然我們還有2系列的工廠

* 總而言之他可以產生v1,f2,w2

* 其實他們兩個是同乙個父類

* 像類似於這樣乙個內結構有什麼樣的好處呢

* 好處就在於你想替換掉這一系列產品的時候

* 你只需要把這一系列產品造出來,同時換掉這個工廠就可以了

* 比如我想把1系列的產品替換成2系列的產品

* 只需要替換產生工廠就可以了

* 你沒有必要所有的東西都自己取new一遍

* * @author leon.sun

* */

public abstract class abstractfactory

package com.learn.abstractfactory;

/** * 作為vehicle來說

* 現在就是面向抽象程式設計

* 有什麼好處,替換起來比較方便

* 擴充套件起來比較容易

* * @author leon.sun

* */

public abstract class vehicle

package com.learn.abstractfactory;

/** * 首先class是abstract

* @author leon.sun

* */

public abstract class weapon

package com.learn.abstractfactory;

public abstract class food

設計模式系列之工廠模式 抽象工廠模式 八

推薦閱讀 設計模式系列之工廠模式 工廠方法模式 七 工廠方法模式通過引入工廠等級結構,解決了簡單工廠模式中工廠類職責太重的問題,但由於工廠方法模式中的每個工廠只生產一類動物,可能會導致系統中存在大量的工廠類。此時,可以考慮將一些相關的動物組成乙個動物族,由同乙個工廠來統一生產,這就是抽象工廠模式的基...

設計模式 工廠系列

簡單工廠 特點 工廠類中包含了必要的邏輯判斷,根據客戶端的選擇條件動態例項化相關的類,客戶端中避免了和具體產品的依賴。缺點 當要繼續增加運算類時,需要在工廠類中增加相應的邏輯。違背了開放 封閉原則。工廠方法 特點 對每乙個產品都有對應的工廠,當增加新產品 在這裡就是增加運算類 時,只需要增加運算類和...

Swift 重學設計模式系列之工廠模式

工廠方法 factorymethod 模式的定義 定義乙個建立產品物件的工廠介面,將產品物件的實際建立工作推遲到具體子工廠類當中。這滿足建立型模式中所要求的 建立與使用相分離 的特點。工廠方法模式的主要優點有 使用者只需要知道具體工廠的名稱就可得到所要的產品,無須知道產品的具體建立過程 在系統增加新...