簡單工廠模式:
這個模式本身很簡單而且使用在業(yè)務(wù)較簡單的情況下。一般用于小項目或者具體產(chǎn)品很少擴(kuò)展的情況(這樣工廠類才不用經(jīng)常更改)。
它由三種角色組成:
工廠類角色:這是本模式的核心,含有一定的商業(yè)邏輯和判斷邏輯,根據(jù)邏輯不同,產(chǎn)生具體的工廠產(chǎn)品。如例子中的Driver類。
抽象產(chǎn)品角色:它一般是具體產(chǎn)品繼承的父類或者實現(xiàn)的接口。由接口或者抽象類來實現(xiàn)。如例中的Car接口。
具體產(chǎn)品角色:工廠類所創(chuàng)建的對象就是此角色的實例。在java中由一個具體類實現(xiàn),如例子中的Benz、Bmw類。
簡單工廠模式優(yōu)缺點
1、優(yōu)點:
工廠類含有必要的判斷邏輯,可以決定在什么時候創(chuàng)建哪一個產(chǎn)品類的實例,客戶端可以免除直接創(chuàng)建產(chǎn)品對象的責(zé)任,而僅僅”消費(fèi)”產(chǎn)品。簡單工廠模式通過這種做法實現(xiàn)了對責(zé)任的分割。
當(dāng)產(chǎn)品有復(fù)雜的多層等級結(jié)構(gòu)時,工廠類只有自己,以不變應(yīng)萬變,就是模式的缺點。因為工廠類集中了所有產(chǎn)品創(chuàng)建邏輯,一旦不能正常工作,整個系統(tǒng)都要受到影響。
2、缺點:
系統(tǒng)擴(kuò)展困難,一旦添加新產(chǎn)品就不得不修改工廠邏輯,有可能造成工廠邏輯過于復(fù)雜,違背了”開放–封閉”原則(OCP)。另外,簡單工廠模式通常使用靜態(tài)工廠方法,這使得無法由子類繼承,造成工廠角色無法形成基于繼承的等級結(jié)構(gòu)。
抽象工廠模式:
可以這么說,它和工廠方法模式的區(qū)別就在于需要創(chuàng)建對象的復(fù)雜程度上。而且抽象工廠模式是三個里面最為抽象、最具一般性的。抽象工廠模式的用意為:給客戶端提供一個接口,可以創(chuàng)建多個產(chǎn)品族中的產(chǎn)品對象。
而且使用抽象工廠模式還要滿足一下條件:
系統(tǒng)中有多個產(chǎn)品族,而系統(tǒng)一次只可能消費(fèi)其中一族產(chǎn)品
同屬于同一個產(chǎn)品族的產(chǎn)品以其使用。
來看看抽象工廠模式的各個角色(和工廠方法的如出一轍):
抽象工廠角色: 這是工廠方法模式的核心,它與應(yīng)用程序無關(guān)。是具體工廠角色必須實現(xiàn)的接口或者必須繼承的父類。在java中它由抽象類或者接口來實現(xiàn)。
具體工廠角色:它含有和具體業(yè)務(wù)邏輯有關(guān)的代碼。由應(yīng)用程序調(diào)用以創(chuàng)建對應(yīng)的具體產(chǎn)品的對象。在java中它由具體的類來實現(xiàn)。
抽象產(chǎn)品角色:它是具體產(chǎn)品繼承的父類或者是實現(xiàn)的接口。在java中一般有抽象類或者接口來實現(xiàn)。
具體產(chǎn)品角色:具體工廠角色所創(chuàng)建的對象就是此角色的實例。在java中由具體的類來實現(xiàn)。
了解更多java培訓(xùn)相關(guān)面試就業(yè)問題歡迎關(guān)注小編!
本文鏈接:
本文章“簡單工廠和抽象工廠有什么區(qū)別”已幫助 184 人
免責(zé)聲明:本信息由用戶發(fā)布,本站不承擔(dān)本信息引起的任何交易及知識產(chǎn)權(quán)侵權(quán)的法律責(zé)任!
本文由賦能網(wǎng) 整理發(fā)布。了解更多培訓(xùn)機(jī)構(gòu)》培訓(xùn)課程》學(xué)習(xí)資訊》課程優(yōu)惠》課程開班》學(xué)校地址等機(jī)構(gòu)信息,可以留下您的聯(lián)系方式,讓課程老師跟你詳細(xì)解答:
咨詢熱線:4008-569-579