Factory 方法模式

來源:互聯網
上載者:User

標籤:原廠模式   對象   main   etc   client   一個   rate   new   product   

Factory 方法模式使用頻率比較高,其定義為:

原廠模式定義一個用於建立對象的介面,讓子類決定執行個體化哪一個類。Factory 方法使一個類的執行個體化延遲到其子類。


一:通用源碼

step1:抽象產品類

public abstract class Product{    //產品類的公用方法    public void method1() {        //商務邏輯    }    //抽象方法    public abstract void method2();}


step2:具體產品類

public class ConcreteProduct1 extends Product{    public abstract void method2(); {        //商務邏輯處理    }}public class ConcreteProduct2 extends Product{    public abstract void method2(); {        //商務邏輯處理    }}


step3:抽象工廠類

public abstract class Creator{    /**     * 建立一個產品對象,其輸入參數類型可以自行設定,通常為String、Enum、Class等,也可為空白     * @param c     * @return     */    public abstract <T extends Product> T createProduct(Class<T> c);}

具體如何產生一個產品的對象呢?有具體的工廠類實現。

step4:具體工廠類

public class ConcreteFactory extends Creator {    @Override    public <T extends Product> T createProduct(Class<T> c) {        //定義一個生產的人種        Product product = null;        try {            //產生一個人種            product = (T)Class.forName(c.getName()).newInstance();        } catch (Exception e) {            //異常處理        }        return (T)product;    }}


step5:情境類

public class Client{    public static void main(String[] args) {        Creator creator = new ConcreteFactory();        Product product = creator.createProduct(ConcreteProduct1.class);        /*         * 後續業務處理         */    }}


二:使用女媧造人的例子,應用通用模板

step1:抽象產品類

public interface Human {    //每個人種都有顏色    public void getColor();    //每個人種都會說話    public void talk();}


step2:具體產品類(這裡只給出一個白色的人)

public class WhiteHuman implements Human {    @Override    public void getColor() {        // TODO Auto-generated method stub        System.out.println("我是白色兒的");    }    @Override    public void talk() {        // TODO Auto-generated method stub        System.out.println("我說的話你聽不懂,you know?");    }}


step3:抽象工廠類

//抽象人類建立工廠public abstract class AbstractHumanFactory {    //必須是Class類型,必須是Human的實作類別    public abstract <T extends Human> T createHuman(Class<T> c);}


step4:具體工廠類

public class HumanFactory extends AbstractHumanFactory {    @Override    public <T extends Human> T createHuman(Class<T> c) {        //定義一個生產的人種        Human human = null;        try {            //產生一個人種            human = (T)Class.forName(c.getName()).newInstance();        } catch (Exception e) {            System.out.println("人種建置錯誤");        }        return (T)human;    }}


step5:情境類

public class NvWa {    //類比女媧造人的過程    public static void main(String[] args) {        AbstractHumanFactory yinYangLu = new HumanFactory();        //造個白色兒的        Human wHuman = yinYangLu.createHuman(WhiteHuman.class);        wHuman.getColor();        wHuman.talk();        //來個黑小子        Human bHuman = yinYangLu.createHuman(BlackHuman.class);        bHuman.getColor();        bHuman.talk();        //小麥色的亞洲寶寶        Human yHuman = yinYangLu.createHuman(YellowHuman.class);        yHuman.getColor();        yHuman.talk();    }}


三:理解

Factory 方法模式使用的比較頻繁,他是典型的解耦架構。高層模組只需要知道產品的抽象類別,其他的實作類別都不用關心。符合迪米特法則,我不需要的就不要去交流;符合依賴倒置原則,只依賴產品類的抽象;符合裡氏替換原則,使用產品子類替換產品父類。

四:寫在後面

設計模式比較抽象,對現在還沒工作的我來說的確有點難理解。我現在只能死記硬背,先能認出人家用的是那種設計模式。希望工作後的我能真正理解設計模式的精髓,掌握他的核心!

Factory 方法模式

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.