簡單工廠和抽象工廠有什麼不同?
(相關推薦:java面試題)
#簡單工廠模式:
這個模式本身很簡單而且使用在業務較簡單的情況下。一般用於小型專案或具體產品很少擴展的情況(這樣工廠類別才不用經常更改)。
它由三個角色組成:
工廠類別角色:這是本模式的核心,含有一定的商業邏輯和判斷邏輯,根據邏輯不同,產生具體的工廠產品。如範例中的Driver類別。
抽象產品角色:它一般是特定產品繼承的父類別或實作的介面。由介面或抽象類別來實作。如例中的Car接口。
具體產品角色:工廠類別所建立的物件就是此角色的實例。在java中由一個具體類別實現,如範例中的Benz、Bmw類別。
(推薦學習:java入門程式)
#來用類別圖來清晰的表示下的它們之間的關係:
抽象工廠模式:
先認識下什麼是產品族: 位於不同產品等級結構中,功能相關聯的產品組成的家族。
圖中的BmwCar和BenzCar就是兩個產品樹(產品層次結構);而如圖所示的BenzSportsCar和BmwSportsCar就是一個產品族。他們都可以放到跑車家族中,因此功能有所關聯。同理BmwBussinessCar和BenzBusinessCar也是一個產品族。
可以這麼說,它和工廠方法模式的差別就在於需要創建物件的複雜程度。而且抽象工廠模式是三個裡面最抽象、最具一般性的。抽象工廠模式的用意為:給客戶端提供一個接口,可以建立多個產品族中的產品物件。
而且使用抽象工廠模式還要滿足一下條件:
1、系統中有多個產品族,而係統一次只可能消費其中一族產品
2、同屬於同一個產品族的產品以其使用。
(影片教學推薦:java影片教學)
我們來看看抽象工廠模式的各個角色(和工廠方法的如出一轍):
抽象工廠角色: 這是工廠方法模式的核心,它與應用程式無關。是具體工廠角色必須實作的介面或是必須繼承的父類別。在java中它是由抽象類別或介面來實作。
具體工廠角色:它含有和具體業務邏輯相關的程式碼。由應用程式呼叫以建立對應的特定產品的物件。在java中它是由具體的類別來實作。
抽象產品角色:它是特定產品繼承的父類別或是實作的介面。在java中一般有抽象類別或介面來實作。
具體產品角色:特定工廠角色所建立的物件就是此角色的實例。在java中由具體的類別來實作。
以上是2020全新Java面試題-設計模式的詳細內容。更多資訊請關注PHP中文網其他相關文章!