基于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 20 PHP
php 函数中使用static的说明
Jun 01 PHP
基于curl数据采集之单页面采集函数get_html的使用
Apr 28 PHP
解析如何屏蔽php中的phpinfo()函数
Jun 06 PHP
使用php判断服务器是否支持Gzip压缩功能
Sep 24 PHP
php使用array_rand()函数从数组中随机选择一个或多个元素
Apr 28 PHP
thinkphp连贯操作实例分析
Nov 22 PHP
PHP根据图片色界在不同位置加水印的方法
Jul 01 PHP
PHP框架性能测试报告
May 08 PHP
配置Nginx+PHP的正确思路与过程
May 10 PHP
Laravel等框架模型关联的可用性浅析
Dec 15 PHP
PHP正则之正向预查与反向预查讲解与实例
Apr 06 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/09/14 PHP
php导出CSV抽象类实例
2014/09/24 PHP
PHP字符串word末字符实现大小写互换的方法
2014/11/10 PHP
php实现购物车功能(上)
2020/07/23 PHP
WordPress JQuery处理沙发头像
2009/06/22 Javascript
Javascript创建Silverlight Plugin以及自定义nonSilverlight和lowSilverlight样式
2010/06/28 Javascript
jquery里的正则表达式说明
2011/08/03 Javascript
javascript 使用for循环时该注意的问题-附问题总结
2015/08/19 Javascript
JavaScript实现一个空中避难的小游戏
2017/06/06 Javascript
form表单序列化详解(推荐)
2017/08/15 Javascript
原生JS实现多个小球碰撞反弹效果示例
2018/01/31 Javascript
javaScript动态添加Li元素的实例
2018/02/24 Javascript
[01:03:03]VP vs Mineski 2018国际邀请赛淘汰赛BO3 第一场 8.22
2018/08/23 DOTA
新手如何快速入门Python(菜鸟必看篇)
2017/06/10 Python
Python实现删除列表中满足一定条件的元素示例
2017/06/12 Python
Python探索之修改Python搜索路径
2017/10/25 Python
selenium在执行phantomjs的API并获取执行结果的方法
2018/12/17 Python
在Python 不同级目录之间模块的调用方法
2019/01/19 Python
Python静态类型检查新工具之pyright 使用指南
2019/04/26 Python
Python打开文件、文件读写操作、with方式、文件常用函数实例分析
2020/01/07 Python
Python编程快速上手——strip()函数的正则表达式实现方法分析
2020/02/29 Python
Python系统公网私网流量监控实现流程
2020/11/23 Python
无需JS和jQuery代码实现CSS3鼠标浮动放大图片
2016/11/21 HTML / CSS
关于HTML5+ API plusready的兼容问题
2020/11/20 HTML / CSS
优秀员工表扬信
2014/01/17 职场文书
人力管理专业毕业生求职信
2014/02/27 职场文书
学生会部长竞聘书
2014/03/31 职场文书
项目合作协议书
2014/04/16 职场文书
考试作弊检讨书1000字(5篇)
2014/10/19 职场文书
2014年客户经理工作总结
2014/11/20 职场文书
亲属关系公证书样本
2015/01/23 职场文书
军训结束新闻稿
2015/07/17 职场文书
Centos环境下Postgresql 安装配置及环境变量配置技巧
2021/05/18 PostgreSQL
详解GaussDB for MySQL性能优化
2021/05/18 MySQL
python 命令行传参方法总结
2021/05/25 Python
MySQL约束(创建表时的各种条件说明)
2022/06/21 MySQL