基于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表单提交表单名称含有点号(.)则会被转化为下划线(_)
Dec 14 PHP
PHP 登录记住密码实现思路
May 07 PHP
php正则匹配html中带class的div并选取其中内容的方法
Jan 13 PHP
PHP超牛逼无限极分类生成树方法
May 11 PHP
php将金额数字转化为中文大写
Jul 09 PHP
php三种实现多线程类似的方法
Oct 30 PHP
Yii实现单用户博客系统文章详情页插入评论表单的方法
Dec 28 PHP
PHP实现动态执行代码的方法
Mar 25 PHP
对比PHP对MySQL的缓冲查询和无缓冲查询
Jul 01 PHP
php微信公众号开发之秒杀
Oct 20 PHP
PHP htmlspecialchars_decode()函数用法讲解
Mar 01 PHP
php中文语义分析实现方法示例
Sep 28 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变量范围介绍
2012/10/15 PHP
php cc攻击代码与防范方法
2012/10/18 PHP
php实现文章置顶功能的方法
2016/10/20 PHP
php 运算符与表达式详细介绍
2016/11/30 PHP
Laravel框架基于中间件实现禁止未登录用户访问页面功能示例
2019/01/17 PHP
JavaScript 异步调用框架 (Part 5 - 链式实现)
2009/08/04 Javascript
jQuery对象数据缓存Cache原理及jQuery.data方法区别介绍
2013/04/07 Javascript
jQuery实现表头固定效果的实例代码
2013/05/24 Javascript
JS+CSS实现仿新浪微博搜索框的方法
2015/02/24 Javascript
使用Function.apply()的参数数组化来提高 JavaScript程序性能的技巧
2015/12/23 Javascript
JS实现iframe编辑器光标位置插入内容的方法(兼容IE和Firefox)
2016/06/24 Javascript
Bootstrap模态框水平垂直居中与增加拖拽功能
2016/11/09 Javascript
AngularJS前端页面操作之用户修改密码功能示例
2017/03/27 Javascript
从零开始学习Node.js系列教程之设置HTTP头的方法示例
2017/04/13 Javascript
微信小程序页面开发注意事项整理
2017/05/18 Javascript
通过学习bootstrop导航条学会修改bootstrop颜色基调
2017/06/11 Javascript
vue项目使用$router.go(-1)返回时刷新原来的界面操作
2020/07/26 Javascript
使用python 3实现发送邮件功能
2018/06/15 Python
python实现多进程代码示例
2018/10/31 Python
OpenCV图像颜色反转算法详解
2019/05/13 Python
python 使用pygame工具包实现贪吃蛇游戏(多彩版)
2019/10/30 Python
python实现简单井字棋游戏
2020/03/04 Python
CSS3实现曲线阴影和翘边阴影
2016/05/03 HTML / CSS
玩具反斗城美国官网:Toys"R"Us
2016/09/17 全球购物
美国在线面料商店:Fashion Fabrics Club
2020/01/31 全球购物
罗技英国官方网站:Logitech UK
2020/11/03 全球购物
党员的自我评价范文
2014/01/02 职场文书
交通事故私了协议书
2014/04/16 职场文书
助人为乐好少年事迹材料
2014/08/18 职场文书
基层干部个人对照检查及整改措施
2014/10/28 职场文书
公司车辆管理制度
2015/08/04 职场文书
2016年读书月活动总结范文
2016/04/06 职场文书
2019年房屋委托租赁合同范本(通用版)!
2019/07/17 职场文书
MySQL 分页查询的优化技巧
2021/05/12 MySQL
Python连续赋值需要注意的一些问题
2021/06/03 Python
Java实现HTML转为Word的示例代码
2022/06/28 Java/Android