基于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 相关文章推荐
Apache设置虚拟WEB
Oct 09 PHP
PHP5.3.1 不再支持ISAPI
Jan 08 PHP
PHP JSON 数据解析代码
May 26 PHP
php中神奇的fastcgi_finish_request
May 02 PHP
phpmyadmin显示utf8_general_ci中文乱码的问题终级篇
Apr 08 PHP
php实现建立多层级目录的方法
Jul 19 PHP
浅谈使用PHP开发微信支付的流程
Oct 04 PHP
PHP会话控制实例分析
Dec 24 PHP
php cli模式下获取参数的方法
May 05 PHP
自制PHP框架之模型与数据库
May 07 PHP
Ajax中的JSON格式与php传输过程全面解析
Nov 14 PHP
php解决约瑟夫环算法实例分析
Sep 30 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
Symfony2实现在doctrine中内置数据的方法
2016/02/05 PHP
PHP微信红包生成代码分享
2016/10/06 PHP
Yii框架使用魔术方法实现跨文件调用功能示例
2017/05/20 PHP
学习jquery必备 api中英文对照的chm手册 下载
2007/05/03 Javascript
JSON扫盲帖 JSON.as类教程
2009/02/16 Javascript
最新的10款jQuery内容滑块插件分享
2011/09/18 Javascript
jQuery ajax serialize() 方法使用示例
2014/11/02 Javascript
VUEJS实战之修复错误并且美化时间(2)
2016/06/13 Javascript
详解如何让InstantClick兼容MathJax、百度统计等
2017/09/12 Javascript
原生JS封装animate运动框架的实例
2017/10/12 Javascript
原生JS实现的双色球功能示例
2018/02/02 Javascript
vue中倒计时组件的实例代码
2018/07/06 Javascript
Vue中的作用域CSS和CSS模块的区别
2018/10/09 Javascript
配置node服务器并且链接微信公众号接口配置步骤详解
2019/06/21 Javascript
JS实现前端动态分页码代码实例
2020/06/02 Javascript
[02:53]2018年度DOTA2最佳战队-完美盛典
2018/12/17 DOTA
python网络编程实例简析
2014/09/26 Python
跟老齐学Python之使用Python查询更新数据库
2014/11/25 Python
python通过getopt模块如何获取执行的命令参数详解
2017/12/29 Python
浅谈python中对于json写入txt文件的编码问题
2018/06/07 Python
Python 使用type来定义类的实现
2019/11/19 Python
Python如何输出整数
2020/06/07 Python
Python爬虫进阶之爬取某视频并下载的实现
2020/12/08 Python
Python数据分析库pandas高级接口dt的使用详解
2020/12/11 Python
python单例模式的应用场景实例讲解
2021/02/24 Python
canvas实现俄罗斯方块的方法示例
2018/12/13 HTML / CSS
购买限量版收藏品、珠宝和礼品:Bradford Exchange
2016/09/23 全球购物
The North Face官方旗舰店:美国著名户外品牌
2020/09/28 全球购物
颇特女士香港官网:NET-A-PORTER香港
2021/03/08 全球购物
药学专业学生的自我评价分享
2014/02/06 职场文书
六一儿童节演讲稿
2014/05/23 职场文书
领导班子整改方案和个人整改措施
2014/10/25 职场文书
2014年大学团支部工作总结
2014/12/02 职场文书
2019年大学推荐信
2019/06/24 职场文书
CSS 新特性 contain控制页面的重绘与重排问题
2021/04/30 HTML / CSS
粗暴解决CUDA out of memory的问题
2021/05/22 Python