一:創造型模式分類
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);
}
}