設(shè)計(jì)模式(DesignPatterns)筆記之一:AbstractFactory

字號(hào):

定義:提供一個(gè)創(chuàng)建一系列相關(guān)或相互依賴對(duì)象的接口,而無(wú)需指定它們具體的類。提供創(chuàng)建對(duì)象的接。
    工廠模式是我們最常用的模式,是用來(lái)創(chuàng)建對(duì)象的,它就相當(dāng)于創(chuàng)建對(duì)象的new。
    例如我們有一個(gè)類Example,我們要?jiǎng)?chuàng)建Example的對(duì)象:
    Example example=new Example();
    或
    Example example=new Example(參數(shù));
    如果創(chuàng)建Example時(shí)做的事情不是如賦值這樣簡(jiǎn)單的事,可能是很長(zhǎng)一段代碼,如果也寫入構(gòu)造函數(shù)中,那明顯的就違背了面向?qū)ο蟮脑瓌t.
    我們需要將創(chuàng)建實(shí)例的責(zé)任與使用實(shí)例的責(zé)任分開, 使得
    Example example=new Example(參數(shù));
    就是簡(jiǎn)單的責(zé)任:使用Example這個(gè)實(shí)例;而創(chuàng)建Example的任務(wù)就交給了Factory工廠模式.
    按照傳統(tǒng)方法,我們?nèi)绻枰^承Example類,生成MyExample,就需要定義Example為Interface,然后,不斷繼承這個(gè)Interface,生成許多子類,造成以后代碼維護(hù)是如此的困難。
    如果,我們開始就采用了工廠模式,也許就沒(méi)有這么多的煩惱了。
    我們生成一個(gè)Factory,它專門負(fù)責(zé)生成Example的實(shí)例。
    public class Factory {
    public static Example getIntance() {
    ......
    if(flag == 1)
    return new MyExample();
    if(flag == 2)
    return new YourExample();
    }
    }
    然后,那么在你的程序中,如果要實(shí)例化MyExample時(shí).就使用
    Example example=Factory.getIntance();//還有其它標(biāo)志,不具體寫了。
    具體使用:
    工廠模式有以下三種:
    1. 簡(jiǎn)單工廠(Simple Factory)
    2. 工廠方法(Factory Method);
    3. 抽象工廠(Abstract Factory)。