基于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 相关文章推荐
PHP完整的日历类(CLASS)
Nov 27 PHP
PHPMyadmin 配置文件详解(配置)
Dec 03 PHP
几款免费开源的不用数据库的php的cms
Dec 19 PHP
一个简单的网页密码登陆php代码
Jul 17 PHP
php设计模式之单例、多例设计模式的应用分析
Jun 30 PHP
php 根据url自动生成缩略图并处理高并发问题
Jan 23 PHP
深入理解PHP原理之执行周期分析
Jun 01 PHP
PHP错误和异常处理功能模块示例
Nov 12 PHP
php观察者模式应用场景实例详解
Feb 03 PHP
php微信公众号开发之秒杀
Oct 20 PHP
PHP单例模式实例分析【防继承,防克隆操作】
May 22 PHP
PHP实现本地图片转base64格式并上传
May 29 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/05/09 PHP
php smarty truncate UTF8乱码问题解决办法
2014/06/13 PHP
PHP实现的简单日历类
2014/11/29 PHP
php+ajax实时输入自动搜索匹配的方法
2014/12/26 PHP
PHP扩展框架之Yaf框架的安装与使用
2016/05/18 PHP
javascript eval函数深入认识
2009/02/21 Javascript
Javascript 验证上传图片大小[客户端]
2009/08/01 Javascript
教您去掉ie网页加载进度条的方法
2010/12/09 Javascript
jQuery EasyUI API 中文文档 - ComboBox组合框
2011/10/07 Javascript
jquery增加时编辑jqGrid(实例代码)
2013/11/08 Javascript
javascript删除数组重复元素的方法汇总
2015/06/24 Javascript
一篇文章掌握RequireJS常用知识
2016/01/26 Javascript
JavaScript提高网站性能优化的建议(二)
2016/07/24 Javascript
Js获取当前日期时间及格式化代码
2016/09/17 Javascript
两种简单的跨域方法(jsonp、php)
2017/01/02 Javascript
详解Web使用webpack构建前端项目
2017/09/23 Javascript
React实践之Tree组件的使用方法
2017/09/30 Javascript
Vue兼容ie9的问题全面解决方案
2018/06/19 Javascript
手把手教你 CKEDITOR 4 扩展插件制作
2019/06/18 Javascript
使用typescript构建Vue应用的实现
2019/08/26 Javascript
Python数据分析之双色球中蓝红球分析统计示例
2018/02/03 Python
在Python中关于使用os模块遍历目录的实现方法
2019/01/03 Python
python使用pymongo操作mongo的完整步骤
2019/04/13 Python
Python Numpy数组扩展repeat和tile使用实例解析
2019/12/09 Python
python操作redis数据库的三种方法
2020/09/10 Python
StubHub中国:购买和出售全球活动门票
2020/01/01 全球购物
综合素质的自我鉴定
2013/10/07 职场文书
经理秘书岗位职责
2013/11/14 职场文书
特色蛋糕店创业计划书
2014/01/28 职场文书
装饰工程师岗位职责
2014/06/08 职场文书
干部个人对照检查材料
2014/08/25 职场文书
Python import模块的缓存问题解决方案
2021/06/02 Python
Python中seaborn库之countplot的数据可视化使用
2021/06/11 Python
centos8安装MongoDB的详细过程
2021/10/24 MongoDB
日本十大血腥动漫,那些被禁播的动漫盘点
2022/03/21 日漫
Redis实现一个账号只能登录一个设备
2022/04/19 Redis