《动力学院设计模式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中文网其他相关文章!