基于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 相关文章推荐
建立动态的WML站点(二)
Oct 09 PHP
PHP cron中的批处理
Sep 16 PHP
基于ubuntu下nginx+php+mysql安装配置的具体操作步骤
Apr 28 PHP
PHP 5.5 创建和验证哈希最简单的方法详解
Nov 07 PHP
CodeIgniter常用知识点小结
May 26 PHP
PHP实现上传多文件示例代码
Feb 20 PHP
PHP去除字符串最后一个字符的三种方法实例
Mar 01 PHP
php封装json通信接口详解及实例
Mar 07 PHP
PHP实现表单提交数据的验证处理功能【防SQL注入和XSS攻击等】
Jul 21 PHP
PHP7实现和CryptoJS的AES加密方式互通示例【AES-128-ECB加密】
Jun 08 PHP
PHP pthreads v3下的Volatile简介与使用方法示例
Feb 21 PHP
PHP7 整型处理机制修改
Mar 09 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调用dll的实例操作动画与代码分享
2012/08/14 PHP
利用php获取服务器时间的实现代码
2013/06/07 PHP
php常用文件操作函数汇总
2014/11/22 PHP
php include类文件超时问题处理
2015/02/06 PHP
详解PHP实现执行定时任务
2015/12/21 PHP
laravel 数据验证规则详解
2019/10/23 PHP
三级下拉菜单的js实现代码
2011/05/23 Javascript
js实现的类似于asp数据字典的数据类型代码实例
2014/09/03 Javascript
jquery实现页面关键词高亮显示的方法
2015/03/12 Javascript
javascript三元运算符用法实例
2015/04/16 Javascript
简单纯js实现点击切换TAB标签实例
2015/08/23 Javascript
微信小程序 基础组件与导航组件详细介绍
2017/02/21 Javascript
无循环 JavaScript(map、reduce、filter和find)
2017/04/08 Javascript
Bootstrap框架建立树形菜单(Tree)的实例代码
2017/10/30 Javascript
vue项目中公用footer组件底部位置的适配问题
2018/05/10 Javascript
webpack实现一个行内样式px转vw的loader示例
2018/09/13 Javascript
优雅的将ElementUI表格变身成树形表格的方法步骤
2019/04/11 Javascript
vue实现导航标题栏随页面滚动渐隐渐显效果
2020/03/12 Javascript
vue键盘事件点击事件加native操作
2020/07/27 Javascript
[01:50:49]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Aster BO3 第三场 1月24日
2021/03/11 DOTA
如何在python字符串中输入纯粹的{}
2018/08/22 Python
Python的Tkinter点击按钮触发事件的例子
2019/07/19 Python
Python爬虫实现“盗取”微信好友信息的方法分析
2019/09/16 Python
Python递归及尾递归优化操作实例分析
2020/02/01 Python
Python批量将图片灰度化的实现代码
2020/04/11 Python
美国按摩椅批发网站:Titan Chair
2018/12/27 全球购物
大学生应聘推荐信范文
2013/11/19 职场文书
公司管理建议书范文
2014/03/12 职场文书
给老师的一封建议书
2014/03/13 职场文书
对祖国的寄语大全
2014/04/11 职场文书
公司请假条范文
2014/04/11 职场文书
校车安全责任书
2014/08/25 职场文书
小学六一儿童节活动方案
2014/08/27 职场文书
纪念九一八事变演讲稿:勿忘国耻
2014/09/14 职场文书
奇妙的 CSS shapes(CSS图形)
2021/04/05 HTML / CSS
分享python函数常见关键字
2022/04/26 Python