基于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 相关文章推荐
第三节--定义一个类
Nov 16 PHP
实用函数7
Nov 08 PHP
PHP 强制性文件下载功能的函数代码(任意文件格式)
May 26 PHP
PHP手机号码归属地查询代码(API接口/mysql)
Sep 04 PHP
Codeigniter+PHPExcel实现导出数据到Excel文件
Jun 12 PHP
再推荐十款免费的php开发工具
Nov 09 PHP
Zend Studio使用技巧两则
Apr 01 PHP
php array_values 返回数组的所有值详解及实例
Nov 12 PHP
thinkPHP5.0框架独立配置与动态配置方法
Mar 17 PHP
PHP PDO操作MySQL基础教程
Jun 05 PHP
php curl获取到json对象并转成数组array的方法
May 31 PHP
基于PHP实现短信验证码发送次数限制
Jul 11 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对mongodb的扩展(初出茅庐)
2012/11/11 PHP
简单谈谈php中ob_flush和flush的区别
2014/11/27 PHP
php微信公众号开发模式详解
2016/11/28 PHP
FormValid0.5版本发布,带ajax自定义验证例子
2007/08/17 Javascript
JS Replace()的高级使用方法介绍
2013/06/29 Javascript
jquery获取radio值(单选组radio)
2014/10/16 Javascript
简述AngularJS相关的一些编程思想
2015/06/23 Javascript
原生javascript实现图片放大镜效果
2017/01/18 Javascript
JavaScript实现的XML与JSON互转功能详解
2017/02/16 Javascript
Bootstrap实现基于carousel.js框架的轮播图效果
2017/05/02 Javascript
浅谈在vue项目中如何定义全局变量和全局函数
2017/10/24 Javascript
jQuery动态添加li标签并添加属性和绑定事件方法
2018/02/24 jQuery
Vuejs学习笔记之使用指令v-model完成表单的数据双向绑定
2019/04/29 Javascript
通过实例解析js简易模块加载器
2019/06/17 Javascript
[01:06:26]全国守擂赛第二周 Team Coach vs DeMonsTer
2020/04/28 DOTA
Python爬取国外天气预报网站的方法
2015/07/10 Python
Python 实现简单的电话本功能
2015/08/09 Python
用Python进行简单图像识别(验证码)
2018/01/19 Python
django创建简单的页面响应实例教程
2019/09/06 Python
python lambda表达式(匿名函数)写法解析
2019/09/16 Python
Python 基于FIR实现Hilbert滤波器求信号包络详解
2020/02/26 Python
django-利用session机制实现唯一登录的例子
2020/03/16 Python
基于python生成英文版词云图代码实例
2020/05/16 Python
如何验证python安装成功
2020/07/06 Python
python跨文件使用全局变量的实现
2020/11/17 Python
html5的自定义data-*属性与jquery的data()方法的使用
2014/07/02 HTML / CSS
HTML5 localStorage使用总结
2017/02/22 HTML / CSS
贯彻学习两会心得体会范文
2014/03/17 职场文书
爱国主义教育活动总结
2014/05/07 职场文书
医生爱岗敬业演讲稿
2014/08/26 职场文书
优秀教师自我评价范文
2014/09/27 职场文书
计划生育个人总结
2015/03/02 职场文书
科技活动总结范文
2015/05/11 职场文书
优秀党员主要事迹材料
2015/11/04 职场文书
高中语文教材(文学文化常识大全一)
2019/08/13 职场文书
go web 预防跨站脚本的实现方式
2021/06/11 Golang