設計模式的總結二:創造型模式

一:創造型模式分類

    1.子類別分類

      對象創造式模型:主要完成對象創建,病將對象中的部分內容放到其他對象中創建。(抽象工廠模式,生成器模式,原型模式,單例模式)

     類創造型模式:主要完成類實例化,並將類中的部分對象放到子類中創建。(工廠方法模式)

     2.創造型模型分類

        1)抽象工廠模式: 提供一個用於創建對象或相互依賴對象的接口,無需指定對象的具體類。

        2)生成器模式:      將複雜的對象構造與其表示相互分離,使得在相同的構建過程中可以創建不同的表示。

        3)工廠方法模式: 允許在子類中實現本類的實例化類。

        4)原型模式:        使用一個原型實例來制定創建對象的種類,然後通過拷貝這些原型實現新對象的創建。

        5)單例模式:確保某個類在系統中僅有一個實例,並提供一個訪問他的全局訪問點。

二:創造型模式的理解:

    1.工廠方法模式

       看名知意,類似工廠生產產品一樣,創建實例對象。你提供一個類,通過工廠就能生產出這個類的對象來。

       模式主要包含這樣幾個類:

       產品類:       定義工廠方法中創建對象接口。

      具體產品類:實現產品類接口。

      工廠類:        聲明工廠方法,返回一個產品類對象,可用於調用創建產品類對象的生成方法。

      具體工廠類:重寫用於創建具體產品類對象的方法。

     2.應用場景:

       1)當需要創建一個類時,而在編輯時不能確定這個類的類型時(需要運行時確定)

       2)當一個類希望由其子類來指定所創建對象的具體類型時。

       3)當我們想要定位被創建類,病獲取相關信息時。

     3.代碼實現:

public interface Pet {
    //產品類(實例化工廠方法模式的基類)
    String getSound();
}
... ...
public class Cat implements Pet {
    //具體產品類(實例化工廠方法模式的派生類)
    @Override
    public String getSound() {
        return "Meaw";
    }
}
... ...
public class Dog implements Pet {
    //具體產品類(實例化工廠方法模式的派生類)
    @Override
    public String getSound() {
        return "Bow";
    }
}
... ...
public class PetFactory {
    //工廠方法模式實現,並展現對象創建邏輯
    public Pet getPet(String sound){
        Pet pet = null;
        //工廠實例化對象的基本邏輯
        if("Meaw".equals(sound)){
            pet = new Cat();
        }else if("Bow".equals(sound)){
            pet = new Dog();
        }
        return pet;
    }
}
... ...
public class AbstractFactoryModel {

    //使用工廠方法模式
    public static void main(String[] args){
        //創建工廠
        PetFactory factory = new PetFactory();

        //實例化一個對象
        Pet pet1 = factory.getPet("Bow");
        showSound(pet1.getSound());

        //實例化一個對象
        Pet pet2 = factory.getPet("Meaw");
        showSound(pet2.getSound());
    }

    //你並不知道會創建那種對象
    private static void showSound(String sound){
        System.out.println("" + sound);
    }

}


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