基于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 相关文章推荐
如何给phpadmin一个保护
Oct 09 PHP
特转载一高手总结PHP学习资源和链接.
Dec 05 PHP
表单复选框向PHP传输数据的代码
Nov 13 PHP
php 的加密函数 md5,crypt,base64_encode 等使用介绍
Apr 09 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十二)
Jun 25 PHP
php中使用sftp教程
Mar 30 PHP
PHP使用curl模拟post上传及接收文件的方法
Mar 04 PHP
详解PHP使用Redis存储session时的一个Warning定位
Jul 05 PHP
关于PHP中协程和阻塞的一些理解与思考
Aug 11 PHP
PHP检测接口Traversable用法详解
Dec 29 PHP
实例讲解通过​PHP创建数据库
Jan 20 PHP
php使用scandir()函数扫描指定目录下所有文件示例
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原型模式
2014/11/25 PHP
php检查日期函数checkdate用法实例
2015/03/19 PHP
php中namespace及use用法分析
2016/12/06 PHP
js removeChild 障眼法 可能出现的错误
2009/10/06 Javascript
五段实用的js高级技巧
2011/12/20 Javascript
解析js如何获取当前url中的参数值并复制给input
2013/06/23 Javascript
瀑布流的实现方式(原生js+jquery+css3)
2020/06/28 Javascript
JS中作用域和变量提升(hoisting)的深入理解
2016/10/31 Javascript
纯JS实现弹性导航条效果
2017/03/06 Javascript
详解ionic本地相册、拍照、裁剪、上传(单图完全版)
2017/10/10 Javascript
JS+WCF实现进度条实时监测数据加载量的方法详解
2017/12/19 Javascript
深入浅析AngularJs模版与v-bind
2018/07/06 Javascript
Node.js Koa2使用JWT进行鉴权的方法示例
2018/08/17 Javascript
vue+element-ui动态生成多级表头的方法
2018/08/28 Javascript
vue如何进行动画的封装
2018/09/26 Javascript
layui动态表头的实现代码
2019/08/22 Javascript
详解基于Vue的支持数据双向绑定的select组件
2019/09/02 Javascript
解决layer弹出层中表单不起作用的问题
2019/09/09 Javascript
vue中进行微博分享的实例讲解
2019/10/14 Javascript
详解Nuxt.js 实战集锦
2019/11/19 Javascript
探索node之事件循环的实现
2020/10/30 Javascript
numpy 对矩阵中Nan的处理:采用平均值的方法
2018/10/30 Python
python获取中文字符串长度的方法
2018/11/14 Python
python如何查看微信消息撤回
2018/11/27 Python
Python函数参数定义及传递方式解析
2020/06/10 Python
Django REST Swagger实现指定api参数
2020/07/07 Python
基于Python组装jmx并调用JMeter实现压力测试
2020/11/03 Python
彻底解决Python包下载慢问题
2020/11/15 Python
斯凯奇美国官网:SKECHERS美国
2016/08/20 全球购物
计算机专业自我鉴定
2013/10/15 职场文书
大客户销售经理职责
2013/12/04 职场文书
歌唱比赛主持词
2014/03/18 职场文书
超市开店计划书
2014/04/26 职场文书
2019年年中工作总结讲话稿模板
2019/03/25 职场文书
2019年暑期法院实习报告
2019/12/18 职场文书
python前后端自定义分页器
2022/04/13 Python