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