北風設計模式課程---2、工廠方法模式


北風設計模式課程---2、工廠方法模式

一、總結

一句話總結:

工廠方法模式相對於簡單工廠模式只是修改了 【工廠核心類-將它變成接口】,具體的創建產品的工作交給【工廠核心類的子類】
滿足了開閉原則:不同產品的創建跑到不同的子工廠,比如創建蘋果去蘋果工廠,創建香蕉去香蕉工廠,我的工廠核心類只負責定義標准

 

1、工廠方法模式實例?

水果基類(接口):定義蘋果,香蕉的采摘標准:蘋果類,香蕉類
水果工廠基類(接口):定義蘋果,香蕉的工廠標准:蘋果工廠,香蕉工廠
創建蘋果去蘋果工廠,創建香蕉去香蕉工廠,我的工廠核心類只負責定義標准

 

2、工廠方法模式對簡單工廠模式的修改體現在哪里?

工廠核心類變成了接口:將工廠變成接口,將實際創建工作推遲到子類當中。
工廠核心類成為一個抽象工廠角色:這樣核心類成為一個抽象工廠角色,僅負責具體工廠子類必須實現的接口
工廠子類完成具體的工廠生成工作

 

3、工廠方法模式中包含的角色及其職責?

1.抽象工廠(Creator)角色:【比如水果工廠】:工廠方法模式的核心,任何工廠類都必須實現這個接口。
2.具體工廠( Concrete  Creator)角色:【比如蘋果工廠,香蕉工廠】:具體工廠類是抽象工廠的一個實現,負責實例化產品對象。
3.抽象(Product)角色:【比如水果接口,比如定義采摘水果的標准】:工廠方法模式所創建的所有對象的父類,它負責描述所有實例所共有的公共接口。
4.具體產品(Concrete Product)角色:【比如蘋果,香蕉】:工廠方法模式所創建的具體實例對象。

 

4、工廠方法模式的別名是什么?

多態工廠模式:因為具體工廠類都有共同的接口,或者有共同的抽象父類。

 

5、工廠方法模式的核心是什么?

抽象工廠類

 

6、工廠方法模式的好處是?

符合“開放-封閉”原則:當系統擴展需要添加新的產品對象時,僅僅需要添加一個具體對象以及一個具體工廠對象,原有工廠對象不需要進行任何修改,也不需要修改客戶端

 

7、“開放-封閉”原則是什么意思?

開放:有很好的擴展性
封閉:擴展的時候不去修改原來的類

 

8、創建型設計模式的作用是什么?

在類創建的時候定義標准,發揮作用

 

9、legend2系統中應該工廠方法模式實例?

抽象產品:英雄(接口),里面有個__construct()創建英雄的抽象方法,或者有一個寫入數據庫數據的抽象方法,還有生成資質,生成屬性的抽象方法
具體產品:人族英雄,魔族英雄,仙族英雄,__construct()創建英雄完成就寫入數據庫
抽象工廠角色:英雄工廠(接口),里面有個getHero抽象方法
具體工廠角色:人族英雄工廠,魔族英雄工廠,返回英雄對象的工廠,創建英雄對象對的時候把英雄對象的數據寫到數據庫

 

10、如何在實例中使用工廠方法模式?

實例對應角色:用實例對應好工廠方法模式的四種角色即可,這樣建模超級簡單,(抽象產品,具體產品,抽象工廠角色,具體工廠角色)

 

11、php中的面向對象是在什么階段發揮作用?

向頁面傳遞數據 和  向數據庫書寫數據 的時候

 

 

 

二、內容在總結中

1、相關知識

 

2、java代碼結構

 

 

3、php代碼

 

 

<?php
//抽象角色
Interface Fruit{
    //采集
    public function get();
};

//具體角色1
class Apple implements Fruit{
    public function get(){
        echo '采集蘋果<br>';
    }
}
//具體角色2
class Banana implements Fruit{
    public function get(){
        echo '采集香蕉<br>';
    }
}

//抽象工廠角色
interface FruitFactory{
    //定義工廠生產產品的規則
    public static function getFruit();
}

//具體工廠角色1:蘋果
class AppleFactory implements FruitFactory{
    public static function getFruit(){
        return new Apple();
    }
}
//具體工廠角色2:香蕉
class BananaFactory implements FruitFactory{
    public static function getFruit(){
        return new Banana();
    }
}

//調用實例
AppleFactory::getFruit()->get();
BananaFactory::getFruit()->get();
?>

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM