亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專(zhuān)欄INFORMATION COLUMN

設(shè)計(jì)模式------3.工廠方法模式

sunsmell / 1950人閱讀

摘要:工廠方法模式缺點(diǎn)每增加一個(gè)產(chǎn)品,就需要額外的增加一個(gè)產(chǎn)品工廠的類(lèi),增加了額外的開(kāi)發(fā)量。

定義:定義一個(gè)用于創(chuàng)建對(duì)象的接口,讓子類(lèi)決定實(shí)例化哪一個(gè)類(lèi)。工廠方法使得一個(gè)類(lèi)的實(shí)例化延遲到了其子類(lèi)。

一、經(jīng)典工廠方法模式
/**
 * 抽象工廠接口,用于創(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

相關(guān)文章

  • JavaScript工廠模式

    摘要:基于工廠角色和產(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)工廠方法...

    oujie 評(píng)論0 收藏0
  • 設(shè)計(jì)模式學(xué)習(xí)筆記:工廠模式

    摘要:二簡(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é),外界...

    luxixing 評(píng)論0 收藏0
  • 工廠模式(一)之抽象工廠模式

    摘要:主要詳解簡(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)單工廠模式 ---...

    woshicixide 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<