《動力學院設計模式PHP影片教學》首先介紹了設計模式,講述了設計模式的使用及重要性,並且詳細說明了應用設計模式的場合。接下來,透過程式碼範例介紹了許多設計模式。最後,透過全面深入的案例分析說明如何使用設計模式來規劃新的應用程序,如何採用PHP語言編寫這些模式,以及如何使用視訊介紹的設計模式修正和重構已有的程式碼區塊。
課程播放網址:http://www.php.cn/course/424.html
該老師講課風格:
教師講課深入淺出,條理清楚,層層剖析,環環相扣,論證嚴密,結構嚴謹,用思維的邏輯力量吸引學生的注意力,用理智控制課堂教學進程。學生透過聽教師的講授,不僅學到知識,也受到思考的訓練,也受到教師嚴謹的治學態度的薰陶和感染。
本影片中較為難點是工廠方法模式精講了:
#1 模式介紹
定義一個用於建立物件的接口,讓子類決定實例化哪一個類,工廠方法使一個類的實例化延遲到其子類。
2 模式中的角色
2.1 抽象工廠(Creator)角色:是工廠方法模式的核心,與應用程式無關。任何在模式中建立的物件的工廠類別必須實作這個介面。
2.2 特定工廠(Concrete Creator)角色:這是實作抽象工廠介面的特定工廠類,包含與應用程式密切相關的邏輯,並且受到應用程式呼叫以建立產品物件。上圖中有兩個這樣的角色:BulbCreator與TubeCreator。
2.3 抽象產品(Product)角色:工廠方法模式所創造的物件的超類型,也就是產品物件的共同父類別或共同擁有的介面。在上圖中,這個角色是Light。
2.4 特定產品(Concrete Product)角色:這個角色實作了抽象產品角色所定義的介面。某具體產品有專門的具體工廠創建,它們之間往往一一對應。
PHP原始碼設計
<?php /** * 工厂方法。由于简单工厂违背了开发-封闭原则 * 工厂方法。将这个改变放到了客户端 * copyright (c) http://blog.csdn.net/CleverCode */ // 运算抽象类 class Operation { /*{{{*/ // 数字A protected $_numberA = null; // 数字B protected $_numberB = null; /** * 设置成员A * * @param double $num 数字 * @return void */ public function setNumberA($num){ $this->_numberA = $num; } /** * 获取成员A * * @return double 数字 */ public function getNumberA(){ return $this->_numberA; } /** * 设置成员B * * @param double $num 数字 * @return void */ public function setNumberB($num){ $this->_numberB = $num; } /** * 获取成员B * * @return double 数字 */ public function getNumberB(){ return $this->_numberA; } /** * 获取运算结果 * * @return double 数字 */ public function getResult(){ return null; } } /*}}}*/ // 加法类 class OperationAdd extends Operation { /*{{{*/ /** * 获取运算结果 * * @return double 数字 */ public function getResult(){ return $this->_numberA + $this->_numberB; } } /*}}}*/ // 减法类 class OperationSub extends Operation { /*{{{*/ /** * 获取运算结果 * * @return double 数字 */ public function getResult(){ return $this->_numberA - $this->_numberB; } } /*}}}*/ //运算工厂 interface IFactory {/*{{{*/ public function createOperate(); }/*}}}*/ //加法工厂 class AddFactory implements IFactory {/*{{{*/ public function createOperate() { return new OperationAdd(); } }/*}}}*/ //减法工厂 class SubFactory implements IFactory {/*{{{*/ public function createOperate() { return new OperationSub(); } }/*}}}*/ class Client {/*{{{*/ public static function main($argv) { //简单工厂的switch case 放到了客户端了 $factory = new AddFactory(); $add = $factory->createOperate(); // 设置数字A $add->setNumberA(5); // 设置数字B $add->setNumberB(2); // 运算 echo $add->getResult()."\r\n"; } }/*}}}*/ Client::main($argv); ?>
以上是動力學院設計模式PHP影片教學分享的詳細內容。更多資訊請關注PHP中文網其他相關文章!