时间:2021-07-01 10:21:17 帮助过:15人阅读
课程播放地址:http://www.gxlcms.com/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视频教程分享的详细内容,更多请关注Gxl网其它相关文章!