GoF設計模式-工廠方法模式

工廠方法模式(重要):
    
    又叫工廠模式或多態工廠,工廠父類負責定義具體實例化類的公共接口,工廠子類負責生成具體的實例化對象,目的是將實例化操作交給工廠子類完成,在程序運行時再確定具體工廠子類的類型,用子類對象覆蓋父類對象

工廠模式的使用環境:

    1.不需要知道要實例化對象的類名,不關心對象創建的細節,只需要知道其對應的具體工廠類
    2.使用多態機制和里氏代換原則,將對象的創建交給具體工廠子類,在程序運行時再確定具體工廠子類的類型,用子類對象覆蓋父類對象
    
工廠方法的優點:

    1.將對象的創建和使用分離,不關心對象創建的細節,不需要知道要創建類的類名
    2.當加入新的類時,無須修改原有的代碼,只需要增加新類和具體工廠類即可,符合開閉原則

工廠方法的缺點:

    1.增加新類時,系統中類的個數成對增加,增加了系統的複雜度
    2.引入了抽象層,增加了系統的抽象性和理解難度

工廠方法模式例子:

要實例化類的父接口

public interface Animal {
    void eat();
}

要實例化的Dog類

public class Dog implements Animal{

     /**
     * @Description: TODO
     * @author doudou
     * @date 2019年10月6日
     * @throws
     * @return
     * @see creation.SimpleFactoryPattern.Animal#eat()
    */
    @Override
    public void eat() {
        System.out.println("小狗喫骨頭。。。");
    }
}

要實例化的Cat類

public class Cat implements Animal{

     /**
     * @Description: TODO
     * @author doudou
     * @date 2019年10月6日
     * @throws
     * @return
     * @see creation.SimpleFactoryPattern.Animal#eat()
    */
    @Override
    public void eat() {
        System.out.println("小貓喫魚。。。");
    }

}

抽象工廠父接口

public interface AnimalFactory {
    Animal getAnimal();
}


具體工廠DogFactory類

public class DogFactory implements AnimalFactory{

     /**
     * @Description: TODO
     * @author doudou
     * @date 2019年10月7日
     * @return
     * @throws
     * @return
     * @see creation.FactoryMethodPattern.AnimalFactory#getAnimal()
    */
    @Override
    public Animal getAnimal() {
        return new Dog();
    }
}


具體工廠CatFactory類

public class CatFactory implements AnimalFactory{

     /**
     * @Description: TODO
     * @author doudou
     * @date 2019年10月7日
     * @return
     * @throws
     * @return
     * @see creation.FactoryMethodPattern.AnimalFactory#getAnimal()
    */
    @Override
    public Animal getAnimal() {
        return new Cat();
    }

}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章