基于php设计模式中工厂模式详细介绍


Posted in PHP onMay 15, 2013

工厂模式:由工厂类根据参数来决定创建出哪一种产片类的实例
工厂类:一个专门用来创建其他对象的方法类。即按需分配,传入参数进行选择,返回具体的类
作用:对象创建的封装、简化创建对象的操作,即调用工厂类的一个方法来得到需要的类
补充:
1.主要角色
:抽象产品(Product)、具体产品(Concrete Product)、抽象工厂角色(Creator)
2.优缺点
    优点:工厂方法模式可以允许系统在不修改工厂角色的情况下引进心产品
    缺点:客户可能仅仅为了创建一个特定的Concrete Product对象,就不得不创建一个Creator子类
3.适用性
    当一个类不知道它所必须创建的对象的时候
    当一个类希望由它的子类来制定它所创建的对象的时候
    当一个类将创建对象的职责委托给多个帮助子类的某一个,并且希望你将哪一个帮助子类是代理这一信息局部化的时候

<?php 
//对象 
class MyObject{ 
    public function __construct(){} 
    public function test(){ 
        return 'test'; 
    } 
} 
//工厂 
class MyFactory{ 
    public static function factory(){ 
        return new MyObject(); 
    } 
} $myObject = MyFactory::factory(); 
echo $myObject->test(); 
?> 
 

?<?php 
//抽象类 定义属性及抽象方法 
abstract class Operation{ 
    protected $_NumberA = 0; 
    protected $_NumberB = 0; 
    protected $_Result= 0; 
    public function __construct($A,$B){ 
        $this->_NumberA = $A; 
        $this->_NumberB = $B; 
    } 
    public function setNumber($A,$B){ 
        $this->_NumberA = $A; 
        $this->_NumberB = $B; 
    } 
    public function clearResult(){ 
        $this->_Result = 0; 
    } 
    abstract protected function getResult(); 
} 
//操作类 
class OperationAdd extends Operation{ 
    public function getResult(){ 
        $this->_Result = $this->_NumbserA + $this->_NumberB; 
        return $this->_Result; 
    } 
} 
class OperationSub extends Operation{ 
    public function getResult(){ 
        $this->_Result = $this->_NumberA - $this->_NumberB; 
        return $this->_Result; 
    } 
} 
………… 
//工厂类 
class OperationFactory{ 
    private static $obj; 
    public static function CreationOperation($type,$A,$B){ 
        switch($type){ 
            case '+': 
                self::$obj = new OperationAdd($A,$B); 
                break; 
            case '-': 
                self::$obj = new OperationSub($A,$B); 
                break; 
            …… 
        } 
    } 
} 
//操作 
$obj = OperationFactory:: CreationOperation('+',5,6); 
echo $obj-> getResult(); 
?>
PHP 相关文章推荐
一个程序下载的管理程序(一)
Oct 09 PHP
模仿OSO的论坛(五)
Oct 09 PHP
php 表单数据的获取代码
Mar 10 PHP
PHP 数组和字符串互相转换实现方法
Mar 26 PHP
table标签的结构与合并单元格的实现方法
Jul 24 PHP
PHP的伪随机数与真随机数详解
May 27 PHP
Yii扩展组件编写方法实例分析
Jun 29 PHP
PHP MVC框架skymvc支持多文件上传
May 26 PHP
PHP针对多用户实现更换头像功能
Sep 04 PHP
PHP实现转盘抽奖算法分享
Apr 15 PHP
Thinkphp 框架配置操作之配置加载与读取配置实例分析
May 15 PHP
详解PHP中curl_multi并发的实现
Jun 08 PHP
php笔记之:数据类型与常量的使用分析
May 14 #PHP
PHP笔记之:基于面向对象设计的详解
May 14 #PHP
php在window iis的莫名问题的测试方法
May 14 #PHP
PHP处理excel cvs表格的方法实例介绍
May 13 #PHP
PHP 处理TXT文件(打开/关闭/检查/读取)
May 13 #PHP
基于wordpress主题制作的具体实现步骤
May 10 #PHP
php Hex RGB颜色值互换的使用
May 10 #PHP
You might like
php更改目录及子目录下所有的文件后缀扩展名的代码
2010/10/12 PHP
smarty内置函数capture用法分析
2015/01/22 PHP
ThinkPHP框架获取最后一次执行SQL语句及变量调试简单操作示例
2018/06/13 PHP
使用js正则控制input标签只允许输入的值
2013/07/29 Javascript
Js参数值中含有单引号或双引号问题的解决方法
2013/11/06 Javascript
jquery选择器大全 全面详解jquery选择器
2014/03/06 Javascript
JS实现两表格里数据来回转移的方法
2015/05/28 Javascript
谈谈jQuery Ajax用法详解
2015/11/27 Javascript
JS中split()用法(将字符串按指定符号分割成数组)
2016/10/24 Javascript
利用Bootstrap实现表格复选框checkbox全选
2016/12/21 Javascript
canvas 绘制圆形时钟
2017/02/22 Javascript
详解vue-cli + webpack 多页面实例应用
2017/04/25 Javascript
javascript判断一个变量是数组还是对象
2019/04/10 Javascript
Vue响应式原理Observer、Dep、Watcher理解
2019/06/06 Javascript
js实现小球在页面规定的区域运动
2020/06/16 Javascript
JavaScript代码简化技巧实例解析
2020/09/09 Javascript
vue中使用echarts的示例
2021/01/03 Vue.js
Python THREADING模块中的JOIN()方法深入理解
2015/02/18 Python
Python3中使用PyMongo的方法详解
2017/07/28 Python
python 禁止函数修改列表的实现方法
2017/08/03 Python
python 类对象和实例对象动态添加方法(分享)
2017/12/31 Python
Python文本处理之按行处理大文件的方法
2018/04/09 Python
对Python3中dict.keys()转换成list类型的方法详解
2019/02/03 Python
python使用QQ邮箱实现自动发送邮件
2020/06/22 Python
CSS3实现任意图片lowpoly动画效果实例
2017/05/11 HTML / CSS
Html5写一个简单的俄罗斯方块小游戏
2019/12/03 HTML / CSS
Marmot土拨鼠官网:美国专业户外运动品牌
2018/01/11 全球购物
办公室经理岗位职责
2014/01/01 职场文书
大学生活动总结怎么写
2014/04/29 职场文书
年度评优评先方案
2014/06/03 职场文书
2015年综治宣传月活动总结
2015/03/25 职场文书
民事诉讼答辩状范文
2015/05/21 职场文书
国富论读书笔记
2015/06/26 职场文书
庆祝教师节主持词
2015/07/06 职场文书
CSS filter 有什么神奇用途
2021/05/25 HTML / CSS
Redis 限流器
2022/05/15 Redis