Android源碼設(shè)計(jì)模式學(xué)習(xí)筆記-抽象工廠方法模式

從一個(gè)栗子開(kāi)始,現(xiàn)在兩種產(chǎn)品一個(gè)是普通輪胎,一個(gè)是越野輪胎,然后生產(chǎn)這兩種產(chǎn)品,用工廠模式去實(shí)現(xiàn)是

public interface ITire {
    void tire();
}
public class NormalTire implements ITire{
    @Override
    public void tire() {
        System.out.println("普通輪胎");
    }
}
public class SUVTire implements ITire{
    @Override
    public void tire() {
        System.out.println("越野輪胎");
    }
}
public class FactoryTire {
    public static <T extends ITire> T createTire(Class<T> clz){
        ITire tire = null;
        try {
            tire = (ITire) Class.forName(clz.getName()).newInstance();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return (T) tire;
    }
}

但是現(xiàn)在需求變了,我不生產(chǎn)輪胎要生產(chǎn)汽車了,那么汽車包含的零件就多了,絕不僅僅限于輪胎,而且汽車的款式也多,這么一個(gè)復(fù)雜的生產(chǎn)關(guān)系,我們就要用到抽象工廠設(shè)計(jì)模式了. 在這個(gè)時(shí)候抽象的工廠是汽車生產(chǎn)工廠,注意它不像簡(jiǎn)單工廠模式那樣,僅僅局限于一種特定的產(chǎn)品去生產(chǎn),所以我們這里還需要對(duì)工廠抽象。
先來(lái)看一張抽象工廠的uml.


image.png

目前需求是生產(chǎn)Q7和Q3汽車,那么需要引擎和輪胎兩種零件,uml可以看成是


image.png

實(shí)際代碼
public interface ITire {
    void tire();
}
public class NormalTire implements ITire{
    @Override
    public void tire() {
        System.out.println("普通輪胎");
    }
}
public class SUVTire implements ITire{
    @Override
    public void tire() {
        System.out.println("越野輪胎");
    }
}
public interface IEngine {
    void engine();
}
public class ImportEngine implements IEngine{
    @Override
    public void engine() {
        System.out.println("進(jìn)口發(fā)動(dòng)機(jī)");
    }
}
public class DemesticEngine implements IEngine{
    @Override
    public void engine() {
        System.out.println("國(guó)產(chǎn)發(fā)動(dòng)機(jī)");
    }
}
public interface CarFactory {
    ITire createTire();
    IEngine createEngine();
}
public class Q3Factory implements CarFactory{
    @Override
    public ITire createTire() {
        return new NormalTire();
    }

    @Override
    public IEngine createEngine() {
        return new DemesticEngine();
    }
}
public class Q7Factory implements CarFactory{
    @Override
    public ITire createTire() {
        return new SUVTire();
    }

    @Override
    public IEngine createEngine() {
        return new ImportEngine();
    }
}

最后調(diào)用

        Q3Factory q3Factory = new Q3Factory();
        q3Factory.createEngine().engine();
        q3Factory.createTire().tire();

        Q7Factory q7Factory = new Q7Factory();
        q7Factory.createEngine().engine();
        q7Factory.createTire().tire();

輸出

01-07 22:14:38.730 9413-9413/? I/System.out: 國(guó)產(chǎn)發(fā)動(dòng)機(jī)
01-07 22:14:38.731 9413-9413/? I/System.out: 普通輪胎
01-07 22:14:38.732 9413-9413/? I/System.out: 進(jìn)口發(fā)動(dòng)機(jī)
01-07 22:14:38.732 9413-9413/? I/System.out: 越野輪胎
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 在上一篇的工廠模式中中,工廠生產(chǎn)出來(lái)的產(chǎn)品都是實(shí)現(xiàn)同一個(gè)接口或繼承同一個(gè)抽象類的。而有時(shí)候工廠可以生產(chǎn)出不是同一個(gè)...
    喵了個(gè)嗚s閱讀 479評(píng)論 0 3
  • 久違的設(shè)計(jì)模式系列視頻。之前寫過(guò)三篇設(shè)計(jì)模式。感興趣的可以看看。 單例模式 觀察者模式 策略模式 好了,我們開(kāi)始正...
    lovesosoi閱讀 734評(píng)論 0 4
  • 接上文抽象工廠 模式模式講解,本文主要從具體示例來(lái)復(fù)現(xiàn)該設(shè)計(jì)模式: 由上文可知,抽象工廠模式的UML圖如下: 【1...
    Ferrari1001閱讀 2,841評(píng)論 0 2
  • 什么是抽象工廠設(shè)計(jì)模式? 由于工廠方法模式中每個(gè)工廠只創(chuàng)建一類具體類的對(duì)象,這將會(huì)導(dǎo)致系統(tǒng)當(dāng)中的工廠類過(guò)多,這勢(shì)必...
    恒星_vvv閱讀 413評(píng)論 0 0
  • 三國(guó)時(shí)代是一個(gè)很混亂的時(shí)代,亂世出英雄,也是一個(gè)英雄輩出的時(shí)代。 很多人或許對(duì)于那些英雄的事跡津津樂(lè)道:劉備曾經(jīng)對(duì)...
    顧蕭肆閱讀 755評(píng)論 0 1

友情鏈接更多精彩內(nèi)容