基于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 相关文章推荐
PHP5中MVC结构学习
Oct 09 PHP
基于文本的访客签到簿
Oct 09 PHP
php面向对象全攻略 (三)特殊的引用“$this”的使用
Sep 30 PHP
php数组函数序列之array_key_exists() - 查找数组键名是否存在
Oct 29 PHP
PHP的curl实现get,post和cookie(实例介绍)
Jun 17 PHP
推荐25款php中非常有用的类库
Sep 29 PHP
php简单实现多语言切换的方法
May 09 PHP
php使用自定义函数实现汉字分割替换功能示例
Jan 30 PHP
PHP unlink与rmdir删除目录及目录下所有文件实例代码
Feb 07 PHP
Laravel5.7 Eloquent ORM快速入门详解
Apr 12 PHP
PHP的new static和new self的区别与使用
Nov 27 PHP
详解使用php-cs-fixer格式化代码
Sep 16 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下正则来匹配dede模板标签的代码
2010/08/21 PHP
PHP中include与require使用方法区别详解
2013/10/19 PHP
实现PHP框架系列文章(6)mysql数据库方法
2016/03/04 PHP
解决PHP 7编译安装错误:cannot stat ‘phar.phar’: No such file or directory
2017/02/25 PHP
解决Laravel5.x的php artisan migrate数据库迁移创建操作报错SQLSTATE[42000]
2020/04/06 PHP
javascript 简单抽屉效果的实现代码
2010/03/09 Javascript
JavaScript 拾碎[三] 使用className属性
2010/10/16 Javascript
JavaScript中字符串分割函数split用法实例
2015/04/07 Javascript
微信小程序 setData的使用方法详解
2017/04/20 Javascript
jquery实现图片放大点击切换
2017/06/06 jQuery
jquery.validate表单验证插件使用详解
2017/06/21 jQuery
基于Bootstrap模态对话框只加载一次 remote 数据的解决方法
2017/07/09 Javascript
微信小程序支付之c#后台实现方法
2017/10/19 Javascript
js 取消页面可以选中文字的功能方法
2018/01/02 Javascript
zTree 树插件实现全国五级地区点击后加载的示例
2018/02/05 Javascript
搭建基于express框架运行环境的方法步骤
2018/11/15 Javascript
微信小程序获取地理位置及经纬度授权代码实例
2019/09/18 Javascript
[02:20]2014DOTA2西雅图邀请赛 MVP外卡赛首胜采访
2014/07/09 DOTA
python读取几个G的csv文件方法
2019/01/07 Python
Python3安装pip工具的详细步骤
2019/10/14 Python
Django框架安装方法图文详解
2019/11/04 Python
python中的函数递归和迭代原理解析
2019/11/14 Python
Tensorflow中的降维函数tf.reduce_*使用总结
2020/04/20 Python
详解appium自动化测试工具(monitor、uiautomatorviewer)
2021/01/27 Python
深入CSS3 动画效果的总结详解
2013/05/09 HTML / CSS
CSS3中媒体查询结合rem布局适配手机屏幕
2019/06/10 HTML / CSS
新加坡网上化妆品店:Best Buy World
2018/05/18 全球购物
德国家用电器购物网站:Premiumshop24
2019/08/22 全球购物
PHP开发的一般流程
2013/08/13 面试题
Oracle里面常用的数据字典有哪些
2014/02/14 面试题
YII2 全局异常处理深入讲解
2021/03/24 PHP
公务员政审个人鉴定
2014/02/25 职场文书
保护环境建议书
2014/03/12 职场文书
优秀党支部书记事迹材料
2014/05/29 职场文书
为Java项目添加Redis缓存的方法
2021/05/18 Redis
Linux下使用C语言代码搭建一个简单的HTTP服务器
2022/04/13 Servers