摘要:工廠方法模式缺點(diǎn)每增加一個(gè)產(chǎn)品,就需要額外的增加一個(gè)產(chǎn)品工廠的類(lèi),增加了額外的開(kāi)發(fā)量。
一、經(jīng)典工廠方法模式定義:定義一個(gè)用于創(chuàng)建對(duì)象的接口,讓子類(lèi)決定實(shí)例化哪一個(gè)類(lèi)。工廠方法使得一個(gè)類(lèi)的實(shí)例化延遲到了其子類(lèi)。
/** * 抽象工廠接口,用于創(chuàng)建計(jì)算對(duì)象 */ public interface IFactory { Calculate getCalculate(); } /** * 抽象計(jì)算接口,表示用于實(shí)現(xiàn)的業(yè)務(wù) */ public interface Calculate { Integer getResult(int a, int b); } /** * 具體工廠類(lèi),實(shí)現(xiàn)抽象工廠接口,返回一個(gè)具體的計(jì)算對(duì)象 */ class AddFactory implements IFactory{ @Override public Calculate getCalculate() { return new Add(); } } class SubFactory implements IFactory{ @Override public Calculate getCalculate() { return new Sub(); } } class MulFactory implements IFactory{ @Override public Calculate getCalculate() { return new Mul(); } } class DivFactory implements IFactory{ @Override public Calculate getCalculate() { return new Div(); } } /** * 具體操作,實(shí)現(xiàn)計(jì)算接口 */ class Add implements Calculate { @Override public Integer getResult(int a, int b) { return a + b; } } class Sub implements Calculate { @Override public Integer getResult(int a, int b) { return a - b; } } class Mul implements Calculate { @Override public Integer getResult(int a, int b) { return a * b; } } class Div implements Calculate { @Override public Integer getResult(int a, int b) { return a / b; } } /** * 測(cè)試 */ public class Test { public static void main(String[] args) { IFactory factory = new AddFactory(); Calculate calculation = factory.getCalculate(); calculation.getResult(1, 2); } }
工廠方法模式優(yōu)點(diǎn):與簡(jiǎn)單工廠相比,工廠方法模式克服了簡(jiǎn)單工廠違背開(kāi)放-封閉原則的缺點(diǎn),又保持了風(fēng)窗對(duì)象創(chuàng)建過(guò)程的優(yōu)點(diǎn)。
簡(jiǎn)單工廠模式優(yōu)點(diǎn):工廠類(lèi)中包含了必要的判斷,根據(jù)客戶(hù)端選擇條件,動(dòng)態(tài)實(shí)例化相關(guān)的類(lèi)。
工廠方法模式缺點(diǎn):每增加一個(gè)產(chǎn)品,就需要額外的增加一個(gè)產(chǎn)品工廠的類(lèi),增加了額外的開(kāi)發(fā)量。
小結(jié):可以看出:工廠方法模式實(shí)現(xiàn)時(shí),客戶(hù)端需要決定實(shí)例化哪一個(gè)工廠,選擇判斷還是在的;工廠方法把簡(jiǎn)單工廠的內(nèi)部邏輯判斷移動(dòng)到了客戶(hù)端,原來(lái)是更改工廠類(lèi),現(xiàn)在是更改客戶(hù)端。
二、《Thinking in java》中改動(dòng)后的工廠模式(使用匿名內(nèi)部類(lèi),客戶(hù)端少了實(shí)例化具體工廠的步驟)/** * 抽象工廠接口,用于創(chuàng)建計(jì)算對(duì)象 */ public interface IFactory { Calculate getCalculate(); } /** * 抽象計(jì)算接口,表示用于實(shí)現(xiàn)的業(yè)務(wù) */ public interface Calculate { Integer getResult(int a, int b); } /** * 具體工廠,使用匿名內(nèi)部類(lèi)實(shí)現(xiàn)接口 */ public class AddFactory implements Calculate{ @Override public Integer getResult(int a, int b) { return a+b; } public static IFactory factory = new IFactory() { public Calculate getCalculate(){ return new AddFactory(); } }; } /** * 將改動(dòng)的工廠類(lèi),做實(shí)際運(yùn)算(可以加入擴(kuò)展方法,實(shí)現(xiàn)各個(gè)具體工廠) */ public class Factories { public static Integer getResult() { Calculate calculation = AddFactory.factory.getCalculate(); return calculation.getResult(1, 2); } } /** * 好處:不用改動(dòng)客戶(hù)端 */ public class Test { public static void main(String[] args) { Integer result = Factories.getResult(); System.out.println(result); } }
優(yōu)點(diǎn):減少了類(lèi)的創(chuàng)建次數(shù),只需要?jiǎng)?chuàng)建一個(gè)工廠類(lèi)(經(jīng)典的工廠方法模式在增加產(chǎn)品時(shí),需要?jiǎng)?chuàng)建具體操作類(lèi)和具體操作工廠類(lèi))
可以使用的手段:
1.客戶(hù)端可以不用修改,只修改Factories類(lèi)的一個(gè)方法(實(shí)現(xiàn)了對(duì)客戶(hù)端細(xì)節(jié)的屏蔽),但只能使用其中一種具體工廠類(lèi)
2.可增加Factories類(lèi)中的方法,讓其有多個(gè)具體操作類(lèi)的實(shí)現(xiàn),但是客戶(hù)端此時(shí)就需要知道有什么方法了,雖然增加了客戶(hù)端的負(fù)擔(dān),但可實(shí)現(xiàn)代碼的復(fù)用
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/70599.html
摘要:基于工廠角色和產(chǎn)品角色的多態(tài)性設(shè)計(jì)是工廠方法模式的關(guān)鍵。工廠方法模式之所以又被稱(chēng)為多態(tài)工廠模式,是因?yàn)樗械木唧w工廠類(lèi)都具有同一抽象父類(lèi)。工廠方法模式總結(jié)工廠方法模式是簡(jiǎn)單工廠模式的進(jìn)一步抽象和推廣。 JavaScript工廠模式 首先需要說(shuō)一下工廠模式。工廠模式根據(jù)抽象程度的不同分為三種 簡(jiǎn)單工廠模式 工廠方法模式 抽象工廠模式 1.簡(jiǎn)單工廠模式 簡(jiǎn)單工廠模式:又稱(chēng)為靜態(tài)工廠方法...
摘要:二簡(jiǎn)單工廠模式組成工廠類(lèi)工廠模式的核心,通過(guò)調(diào)用它來(lái)實(shí)現(xiàn)其他類(lèi)的功能。三工廠方法模式利用工廠方法模式可以有效解決簡(jiǎn)單工廠模式破壞開(kāi)閉原則的問(wèn)題。 一、概念 1、工廠模式分為三類(lèi):(1)簡(jiǎn)單工廠模式:一個(gè)工廠創(chuàng)建所有產(chǎn)品(2)工廠方法模式:一個(gè)工廠方法創(chuàng)建一個(gè)產(chǎn)品(3)抽象工廠模式:一個(gè)工廠方法創(chuàng)建一類(lèi)產(chǎn)品 2、創(chuàng)建型模式這種模式是指將實(shí)例的創(chuàng)建和使用分離開(kāi)來(lái),隱藏類(lèi)實(shí)例的創(chuàng)建細(xì)節(jié),外界...
摘要:主要詳解簡(jiǎn)單工廠模式到抽象工廠模式的演變。抽象工廠模式當(dāng)一個(gè)類(lèi)別的產(chǎn)品還有多個(gè)系列區(qū)分時(shí),為了按系列生產(chǎn)商品,使用抽象工廠區(qū)分。 主要詳解簡(jiǎn)單工廠模式到抽象工廠模式的演變。 簡(jiǎn)單工廠模式 即靜態(tài)工廠模式1.將對(duì)象的創(chuàng)建和使用分開(kāi);2.將生產(chǎn)過(guò)程集中,便于集中管理;3.當(dāng)需要?jiǎng)?chuàng)建的對(duì)象類(lèi)有變動(dòng)時(shí),就不用在所有new 的地方修改了,直接修改工廠類(lèi)即可; /** * 簡(jiǎn)單工廠模式 ---...
閱讀 3273·2021-11-10 11:35
閱讀 1473·2019-08-30 13:20
閱讀 1173·2019-08-29 16:18
閱讀 2204·2019-08-26 13:54
閱讀 2214·2019-08-26 13:50
閱讀 1008·2019-08-26 13:39
閱讀 2553·2019-08-26 12:08
閱讀 2007·2019-08-26 10:37