一,抽象工廠的出現
由於簡單工廠不能應對「不同系列物件」的變化。比如有不同風格的場景—對應不同
風格的道路,房屋、地道、、、、。
二、 抽象工廠的具體實現
例如:絕味鴨脖想在江西、南昌和上海開分店,但是由於當地人的口味不同,在南昌
的所有絕味的東西會做的比較辣一些,而上海不喜歡吃辣的,所以上海不會做成像南昌
那麼的辣,這導致南昌絕味工廠和上海絕味工廠生產所有絕味產品不同,也就是某個
具體工廠負責一系列產品的口味不同。
/**
* 下面以絕味鴨脖連鎖店為例子,演示抽象工廠模式
* 因為每個地方喜歡的口味不同,有些地方喜歡辣點的,有的地方不喜歡吃辣
* * 客戶端呼叫.
*/public
class
client
}/**
* 抽象工廠,提供不同地方鴨架和鴨脖的介面.
*/public
abstract
class
abstractfactory
/** *南昌絕味工廠製作南昌的鴨脖和鴨架.
*/public
class
nanchangfactory
extends
abstractfactory
@override
public yajia createyajia()
}/**
* 上海絕味工廠,負責製作上海的鴨脖和鴨架.
*/public
class
shanghaifactory
extends
abstractfactory
//製作上海鴨架
@override
public yajia createyajia()
}/**
* 鴨脖抽象類,供每個地方實現類繼承
*/public
abstract
class
yabo
/** * 鴨架抽象類,供每個地方的鴨架類繼承.
*/public
abstract
class
yajia
/** * 南昌鴨脖,因為南昌喜歡吃辣,所以製作的鴨脖比上海製作的鴨脖辣.
*/public
class
nanchangyabo
extends
yabo
}/**
* 南昌鴨架.
*/public
class
nanchangyajia
extends
yajia
}/**
* 上海的鴨脖,沒有南昌鴨脖做的辣.
*/public
class
shanghaiyabo
extends
yabo
}/**
* 上海的鴨架.
*/public
class
shanghaiyajia
extends
yajia
}
三、抽象工廠模式的定義和類圖![](https://pic.w3help.cc/ac5/855dead188c8a493cac47cd789241.jpeg)
1,抽象工廠應對需求變更
看完上面抽象工廠的實現之後,如果 「絕味」公司又想在湖南開一家分店怎麼辦呢? 因為湖南人喜歡吃麻辣的,
下面就具體看看應用了抽象工廠模式的系統是如何應對這種需求的。
/**
* 如果絕味又想開一家湖南的分店時,因為湖南喜歡吃麻的
* 所以這是有需要有一家湖南的工廠專門製作.
*/public
class
hunanfactory
extends
abstractfactory
@override
public yajia createyajia()
}/**
* 湖南鴨脖.
*/public
class
hunanyabo
extends
yajia
}/**
* 湖南的鴨架.
*/public
class
hunanyajia
extends
yajia
}
四、抽象工廠的優缺點優點:抽象工廠模式將具體產品的建立延遲到具體工廠的子類中,這樣將物件的建立
封裝起來,可以減少客戶端與具體產品類之間的依賴,從而降低系統耦合度,這樣有
利於後期的維護和擴充套件。
缺點:抽象工廠很難支援新品種的變化。這是因為抽象工廠中的介面已經確定可以被
建立的產品集合,如果需要新增新產品,此時就必須修改抽象工廠的介面,這樣就違
背了「開放-封閉」原則。
工廠模式三 抽象工廠模式
抽象工廠模式可以用來生產不同產品族的全部產品。對於新增加的產品,無能為力 但是支援增加產品族 抽象工廠模式其實是工廠方法模式的公升級版本,在有多個業務品種和分類時,通過抽象工廠模式產生需要的物件是一種非常好的解決方案。首先建立發動機引擎的介面與不同層次引擎的實現類 public inte ce en...
三)工廠模式 抽象工廠模式
1 工廠模式介紹建立型設計模式,結構簡單的模式,建立物件的介面,讓子類決定例項化哪個類 2 工廠模式使用場景 在任何需要生成複雜物件的地方,都可以使用,用new就可以生成就無需使用 3 工廠模式的組成 分為四大模組,一是抽象工廠,為工廠方法模式的核心,二是具體工廠,實現具體的業務邏輯,三是抽象產品,...
三 抽象工廠模式
抽象工廠模式可以向客戶端提供乙個介面,使得客戶端在不必指定類例項的具體型別的情況下,能夠建立多個類例項族的類例項物件。public inte ce fruitfactory其中包括公共的抽象角色和具體類的進一步抽象。public inte ce fruitpublic abstract class ...