工廠方法模式GoF23種設計模式之建立型模式之工廠方法模式

weixin_34219944發表於2013-05-30

在寫這篇文章之前,xxx已經寫過了幾篇關於改工廠方法模式主題的文章,想要了解的朋友可以去翻一下之前的文章

    一、概述

        定義一個用於創立物件的介面,讓子類去決定例項化哪個類。工廠方法將一個類的例項化延遲至其子類。

    二、適用性

    1.當一個類不知道它所必須創立的物件的類的時候。

    2.當一個類希望由其子類來指定它所創立的物件的時候。

    3.當類將創立物件的職責委託給多個幫助子類的某一個,並且你希望將哪個幫助子類是代理者這一資訊區域性化的時候。

    三、參與者

    1.Product:定義工廠方法所創立的物件的介面。

    2.ConcreteProduct:實現Product介面。

    3.Creator:宣告工廠方法,該方法返回一個Product型別的物件。Creator也可以定義一個工廠方法的預設實現,它返回一個預設的ConcreteProduct物件。

    4.ConcreteCreator:重定義工廠方法以返回一個ConcreteProduct例項。

    四、類圖

    工廠方法和模式

    五、示例

    Product

package cn.lynn.factorymethod;

public interface IWork {

    public void doWork();

}

    ConcreteProduct

package cn.lynn.factorymethod;

public class ManagerWork implements IWork {

    @Override
    public void doWork() {
        System.out.println("經理審批流程!");
    }

}
package cn.lynn.factorymethod;

public class EmployeeWork implements IWork {

    @Override
    public void doWork() {
        System.out.println("員工處理事件!");
    }

}
    每日一道理
愛心是一片照射在冬日的陽光,使貧病交迫的人感到人間的溫暖;愛心是一泓出現在沙漠裡的泉水,使瀕臨絕境的人重新看到生活的希望;愛心是一首飄蕩在夜空的歌謠,使孤苦無依的人獲得心靈的慰藉。

    Creator

package cn.lynn.factorymethod;

public interface IWorkFactory {

    public IWork getWork();

}

    ConcreteCreator

package cn.lynn.factorymethod;

public class ManagerWorkFactory implements IWorkFactory {

    @Override
    public IWork getWork() {
        return new ManagerWork();
    }

}
package cn.lynn.factorymethod;

public class EmployeeWorkFactory implements IWorkFactory {

    @Override
    public IWork getWork() {
        return new EmployeeWork();
    }

}

    Test

package cn.lynn.factorymethod;

public class Test {

    public static void main(String[] args) {
        IWorkFactory employeeWorkFactory = new EmployeeWorkFactory();
        employeeWorkFactory.getWork().doWork();
        
        IWorkFactory managerWorkFactory = new ManagerWorkFactory();
        managerWorkFactory.getWork().doWork();
    }

}

    Result

員工處理事件!
經理審批流程!

文章結束給大家分享下程式設計師的一些笑話語錄: 程式語言綜述
CLIPPER 程式設計師不去真的獵捕大象,他們只是購買大象部分的庫然後花幾年的時間試圖綜合它們。
DBASE 程式設計師只在夜間獵捕大象,因為那時沒人會注意到他們還在使用石弓。
FOXPRO 程式設計師開始使用更新更好的步槍,這使他們花掉比實際狩獵更多的時間學習新的射擊技術。
C 程式設計師拒絕直接購買步槍,寧可帶著鋼管和一個移動式機器車間到非洲,意欲從零開始造一枝完美的步槍。
PARADOX 程式設計師去非洲時帶著好萊塢關於獵捕大象的電影劇本,他們認為照劇本行事就會逮到一頭大象。
ACCESS 程式設計師在沒有任何獵象經驗的經驗下就出發了,他們穿著華麗的獵裝、帶著全部裝備,用漂亮的望遠鏡找到了大象,然後發覺忘了帶扳機。
RBASE 程式設計師比大象還要稀少,事實上,如果一頭大象看到了一個RBASE程式設計師,對他是個幸運日。
VISUAL ACCESS 程式設計師裝上子彈、舉起步槍、瞄準大象,這使大象感到可笑,究竟誰逃跑。他們無法抓住大象,因為由於他們對多重控制的偏愛,他們的吉普車有太多的方向盤因而無法駕駛。
ADA、APL和FORTRAN 程式設計師與聖誕老人和仙女一樣是虛構的。
COBOL 程式設計師對和自己一樣瀕臨滅絕的大象寄予了深切的同情。

--------------------------------- 原創文章 By
工廠方法和模式
---------------------------------

相關文章