安卓設(shè)計(jì)模式(八)工廠(chǎng)方法模式

工廠(chǎng)方法模式是創(chuàng)建性設(shè)計(jì)模式之一,一般用于復(fù)雜對(duì)象的創(chuàng)建

該系列其他文章:

定義: 定義一個(gè)用于創(chuàng)建對(duì)象的接口(非指interface),讓子類(lèi)決定實(shí)例化哪個(gè)類(lèi)

使用場(chǎng)景: 創(chuàng)建復(fù)雜對(duì)象,且有多種功能相同的對(duì)象

實(shí)現(xiàn)舉例

下面以Androd經(jīng)常用到的緩存Cache來(lái)舉例說(shuō)明:

緩存接口,定義所有緩存必須實(shí)現(xiàn)的方法

public interface ICache {
    String get(String key);

    void put(String key, String value);

    void removeCache(String key);

    void clearCache();
}

工廠(chǎng)方法根據(jù)需求又用幾種不同的實(shí)現(xiàn),不過(guò)思想是一致的,下面分別說(shuō)明

1. 簡(jiǎn)單工廠(chǎng)(靜態(tài)工廠(chǎng))

如果我們程序中整體只需要一種緩存即可,不需要多種緩存,如磁盤(pán)緩存,所以只需要單一緩存子類(lèi)及單一工廠(chǎng)即可:

    /**
     * 磁盤(pán)緩存,具體方法實(shí)現(xiàn)省略
     */
    public class DiskCache implements ICache {
    
    
        @Override
        public String get(String key) {
            return null;
        }
    
        @Override
        public void put(String key, String value) {
    
        }
    
        @Override
        public void removeCache(String key) {
    
        }
    
        @Override
        public void clearCache() {
    
        }
    }

    /**
     * 簡(jiǎn)單工廠(chǎng),只創(chuàng)建一種緩存
     */
    public class StaticCacheFactory {
        
        public static ICache create() {//注意這里直接使用static方法
            return new DiskCache();
        }
    } 
    
    //使用
    ICache iCache = StaticCacheFactory.create();
    iCache.get("");

2. 工廠(chǎng)與產(chǎn)品一對(duì)一,即每個(gè)工廠(chǎng)負(fù)責(zé)生產(chǎn)一種產(chǎn)品

    /**
     * 工廠(chǎng)接口,定義所有工廠(chǎng)的必須實(shí)現(xiàn)的方法
     */
    public interface ICacheFactory {
        
        ICache create();//創(chuàng)建緩存
    }

    /**
     * 磁盤(pán)緩存工廠(chǎng),用于生產(chǎn)磁盤(pán)緩存實(shí)例
     */
    public class DiskFactory implements ICacheFactory {
        @Override
        public ICache create() {
            return new DiskCache();
        }
    }

    /**
     * 內(nèi)存緩存工廠(chǎng),用于生產(chǎn)內(nèi)存緩存實(shí)例
     */
    public class MemoryFactory implements ICacheFactory {
        @Override
        public ICache create() {
            return new MemoryCache();
        }
    }

    //使用:
    ICacheFactory factory = new DiskFactory();
    //如果需要內(nèi)存緩存
    //ICacheFactory factory = new MemoryFactory();
    ICache iCache = factory.create();
    iCache.clearCache();

3. 工廠(chǎng)與產(chǎn)品一對(duì)多,即每個(gè)工廠(chǎng)可以生產(chǎn)多種產(chǎn)品

工廠(chǎng)接口,定義所有工廠(chǎng)的必須實(shí)現(xiàn)的方法:

public interface ICacheFactory {

    <T extends ICache> T create(Class<T> c);//創(chuàng)建緩存實(shí)例
} 

具體工廠(chǎng),可根據(jù)需求生產(chǎn)不同的產(chǎn)品:

public class CacheFactory implements ICacheFactory {
    @Override
    public <T extends ICache> T create(Class<T> c) {
        T cache = null;
        try {
            cache = (T) Class.forName(c.getName()).newInstance();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return cache;
    }
}

使用:

ICacheFactory cacheFactory = new CacheFactory();
ICache diskCache = cacheFactory.create(DiskCache.class);//根據(jù)類(lèi)型創(chuàng)建不同的緩存實(shí)例
ICache memoryCache = cacheFactory.create(MemoryCache.class);//根據(jù)類(lèi)型創(chuàng)建不同的緩存實(shí)例

diskCache.clearCache();    
memoryCache.clearCache();    

總結(jié)

由以上可以的舉例可以看到使用工廠(chǎng)方法創(chuàng)建對(duì)象簡(jiǎn)單明了,如果上面的緩存對(duì)象創(chuàng)建時(shí)需要設(shè)置很多參數(shù),初始化數(shù)據(jù)等等,那么使用工廠(chǎng)方法模式相對(duì)于直接new一個(gè)實(shí)例有很大優(yōu)勢(shì).工廠(chǎng)方法模式將對(duì)象的創(chuàng)建過(guò)程封裝在工廠(chǎng)中,使得客戶(hù)端無(wú)需再關(guān)心實(shí)例的創(chuàng)建和初始化過(guò)程.

實(shí)際開(kāi)發(fā)中第三種使用的比較多,根據(jù)需求創(chuàng)建不同實(shí)例.

關(guān)于作者

最后編輯于
?著作權(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)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,733評(píng)論 25 709
  • 設(shè)計(jì)模式匯總 一、基礎(chǔ)知識(shí) 1. 設(shè)計(jì)模式概述 定義:設(shè)計(jì)模式(Design Pattern)是一套被反復(fù)使用、多...
    MinoyJet閱讀 4,073評(píng)論 1 15
  • 1 場(chǎng)景問(wèn)題# 1.1 導(dǎo)出數(shù)據(jù)的應(yīng)用框架## 考慮這樣一個(gè)實(shí)際應(yīng)用:實(shí)現(xiàn)一個(gè)導(dǎo)出數(shù)據(jù)的應(yīng)用框架,來(lái)讓客戶(hù)選擇數(shù)據(jù)...
    七寸知架構(gòu)閱讀 7,004評(píng)論 6 75
  • 簡(jiǎn)單工廠(chǎng)模式雖然簡(jiǎn)單,但存在一個(gè)很?chē)?yán)重的問(wèn)題。當(dāng)系統(tǒng)中需要引入新產(chǎn)品時(shí),由于靜態(tài)工廠(chǎng)方法通過(guò)所傳入?yún)?shù)的不同來(lái)創(chuàng)建...
    justCode_閱讀 1,304評(píng)論 1 9
  • 近期,記者走訪(fǎng)浙江御藏閣私人博物館,被其宏大的場(chǎng)面震撼,其藏品之精美、裝修之豪華堪比故宮。下面,就由小編向大家一一...
    百家收藏武老師閱讀 1,669評(píng)論 1 5

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