php工厂方法模式
来源:互联网 发布:买家如何做淘宝客 编辑:程序博客网 时间:2024/05/16 09:44
CleverCode最近在看工厂方法模式。
1 模式介绍
定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类。
2 模式中的角色
2.1 抽象工厂(Creator)角色:是工厂方法模式的核心,与应用程序无关。任何在模式中创建的对象的工厂类必须实现这个接口。
2.2 具体工厂(Concrete Creator)角色:这是实现抽象工厂接口的具体工厂类,包含与应用程序密切相关的逻辑,并且受到应用程序调用以创建产品对象。在上图中有两个这样的角色:BulbCreator与TubeCreator。
2.3 抽象产品(Product)角色:工厂方法模式所创建的对象的超类型,也就是产品对象的共同父类或共同拥有的接口。在上图中,这个角色是Light。
2.4 具体产品(Concrete Product)角色:这个角色实现了抽象产品角色所定义的接口。某具体产品有专门的具体工厂创建,它们之间往往一一对应。
3 模式结构
4 项目应用
4.1 加法减法引用工厂方法
4.2 类结构图
4.3 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);?>
4.4 结果展示
1 0
- php 工厂方法模式
- php工厂方法模式
- php工厂方法模式
- PHP 工厂方法模式
- php 设计模式(工厂方法模式)
- PHP设计模式——工厂方法
- php、java实现工厂方法模式
- php设计模式之工厂方法
- PHP简单工厂模式、工厂方法模式和抽象工厂模式比较
- PHP简单工厂模式、工厂方法模式和抽象工厂模式
- php简单工厂模式,工厂方法模式和抽象工厂模式比较
- PHP简单工厂模式、工厂方法模式和抽象工厂模式比较
- PHP简单工厂模式、工厂方法模式和抽象工厂模式比较
- 工厂模式 -- 工厂方法
- 工厂模式-工厂方法
- 工厂模式-工厂方法
- 工厂 > 工厂方法模式
- PHP生成对象之设计模式—工厂方法模式
- Web系统大规模并发——电商秒杀与抢购
- Java对各种排序算法的实现
- C/C++基础知识
- C语言的强符号和弱符号深入理解
- Git (二):工作区和暂存区
- php工厂方法模式
- 程序员生活上需要明白的13件事
- redis 实现 ip 限制
- Java 基础语法
- Markdown基础语法学习
- 简易版二叉查找树(查找,插入,遍历,删除)
- 程序员的又一春,微信小程序带来的一个赚钱机遇
- 中国历史之精神
- 反射