工廠方法模式

1.工廠方法模式介紹

工廠方法模式是一種結構簡單的模式抛丽,其在我們平時開發(fā)中應用很廣泛冤吨,也許你并不知道垒探,但是你已經使用了無數(shù)次該模式了圾叼,如activity里的各個生命周期方法,以onCreate為例,他就可以看作是一個工廠方法,我們在其中可以構造我們的view呜笑,并通過setContentView()返回給framework處理等驼鹅。

2.工廠方法模式的定義

定義一個用于創(chuàng)建對象的接口,讓子類決定實例化那個類。

3.工廠方法模式的使用場景

在任何需要生成復雜對象的地方,都可以使用工廠方法模式,復雜對象適合使用工廠模式,用new就可以完成創(chuàng)建的對象無需使用工廠模式娶眷。

4.工廠模式的簡單用例

public abstract class Product {

    /**
     * 產品類的抽象方法
     * 有具體的產品類去實現(xiàn)
     */
    public abstract void method();
}
public class ConcreateProductA extends Product {
    @Override
    public void method() {
        System.out.print("我是具體產品A");
    }
}
public class ConcreateProductB extends Product {
    @Override
    public void method() {
        System.out.print("我是具體產品B");
    }
}

public abstract class Factory {
    /**
     * 抽象工廠類
     * 具體產生什么由子類去實現(xiàn)
     * @return
     */
    public abstract Product createProduct();
}
public class ConcreteFactory extends Factory {
    @Override
    public Product createProduct() {
        return new ConcreateProductA();
    }
}
public class Client {
    public static void main(String[] agrs) {
        Factory factory = new ConcreteFactory();
        Product product = factory.createProduct();
        product.method();
    }
}

四大模塊:

抽象工廠:工廠方法模式的核心届宠;

具體工廠:實現(xiàn)具體的業(yè)務邏輯幌羞;

抽象產品:工廠方法模式創(chuàng)建的產品的父類聂宾;

具體產品:實現(xiàn)抽象產品的某個具體產品的對象;

這種方法比較常見系谐,需要哪一個產品就生產那個,有時候也可以利用反射方式更簡潔的來生成具體產品對象,此時,需要在工廠方法的參數(shù)列表中傳入一個class類來決定是哪一個產品類植康。

public abstract class Factory1 {
    /**
     * 抽象工廠類
     * 具體產生什么由子類去實現(xiàn)
     *
     * @return
     */
    public abstract <V extends Product> V createProduct(Class<V> clz);
}
public class ConcreteFactory1 extends Factory1 {
    @Override
    public <T extends Product> T createProduct(Class<T> clz) {
        Product p = null;
        try {
            p = (Product) Class.forName(clz.getName()).newInstance();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        return (T) p;
    }
}

再來看看具體的Client中的實現(xiàn)

public class Client {
    public static void main(String[] agrs) {
        Factory factory = new ConcreteFactory();
        Product product = factory.createProduct();
        product.method();

        Factory1 factory1 = new ConcreteFactory1();
        Product product1 = factory1.createProduct(ConcreateProductA.class);
        product1.method();
    }
}

需要哪一個類的對象就傳入哪一個類的對象旷太,這種方法比較簡潔展懈,動態(tài)销睁,如果你不喜歡這種方式,以惡可以嘗試每一個產品定義一個具體的工廠存崖,各司其職冻记。

像這樣擁有多個工廠的方式我們稱為工廠方法模式。它降低了對象之間的耦合度来惧,而且冗栗,工廠方法模式依賴于抽象的架構,其將實例化的任務交由子類去完成供搀,有非常好的擴展性隅居。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市葛虐,隨后出現(xiàn)的幾起案子胎源,更是在濱河造成了極大的恐慌,老刑警劉巖屿脐,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件涕蚤,死亡現(xiàn)場離奇詭異,居然都是意外死亡的诵,警方通過查閱死者的電腦和手機万栅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來西疤,“玉大人烦粒,你說我怎么就攤上這事〈蓿” “怎么了扰她?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵娩贷,是天一觀的道長空入。 經常有香客問我,道長姐呐,這世上最難降的妖魔是什么豁跑? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任廉涕,我火速辦了婚禮泻云,結果婚禮上,老公的妹妹穿的比我還像新娘狐蜕。我一直安慰自己宠纯,他們只是感情好,可當我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布层释。 她就那樣靜靜地躺著婆瓜,像睡著了一般。 火紅的嫁衣襯著肌膚如雪贡羔。 梳的紋絲不亂的頭發(fā)上廉白,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天,我揣著相機與錄音乖寒,去河邊找鬼猴蹂。 笑死,一個胖子當著我的面吹牛楣嘁,可吹牛的內容都是我干的磅轻。 我是一名探鬼主播,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼逐虚,長吁一口氣:“原來是場噩夢啊……” “哼聋溜!你這毒婦竟也來了?” 一聲冷哼從身側響起叭爱,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤撮躁,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后涤伐,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體馒胆,經...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年凝果,在試婚紗的時候發(fā)現(xiàn)自己被綠了祝迂。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡器净,死狀恐怖型雳,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情山害,我是刑警寧澤纠俭,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站浪慌,受9級特大地震影響冤荆,放射性物質發(fā)生泄漏。R本人自食惡果不足惜权纤,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一钓简、第九天 我趴在偏房一處隱蔽的房頂上張望乌妒。 院中可真熱鬧,春花似錦外邓、人聲如沸撤蚊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽侦啸。三九已至,卻和暖如春丧枪,著一層夾襖步出監(jiān)牢的瞬間光涂,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工豪诲, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留顶捷,地道東北人。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓屎篱,卻偏偏與公主長得像,于是被迫代替她去往敵國和親葵蒂。 傳聞我的和親對象是個殘疾皇子交播,可洞房花燭夜當晚...
    茶點故事閱讀 44,577評論 2 353