基于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 相关文章推荐
通过ODBC连接的SQL SERVER实例
Oct 09 PHP
php 遍历显示文件夹下所有目录、所有文件的函数,没有分页的代码
Nov 14 PHP
PHP 变量的定义方法
Jan 26 PHP
PHP字符串处理的10个简单方法
Jun 30 PHP
PHP 第二节 数据类型之数值型
Apr 28 PHP
PHPMailer的主要功能特点和简单使用说明
Feb 17 PHP
php判断是否为json格式的方法
Mar 04 PHP
php采用curl模仿登录人人网发布动态的方法
Nov 07 PHP
php获取汉字拼音首字母的方法
Oct 21 PHP
Laravel框架中VerifyCsrfToken报错问题的解决
Aug 30 PHP
浅谈Laravel核心解读之Console内核
Dec 02 PHP
layui数据表格自定义每页条数limit设置
Oct 26 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
windows7下安装php的php-ssh2扩展教程
2014/07/04 PHP
PHP使用第三方即时获取物流动态实例详解
2017/04/27 PHP
PHP实现限制IP访问及提交次数的方法详解
2017/07/17 PHP
Yii2使用表单上传文件的实例代码
2017/08/03 PHP
JavaScript之HTMLCollection接口代码
2011/04/27 Javascript
jquery 操作日期、星期、元素的追加的实现代码
2012/02/07 Javascript
javascript Array.prototype.slice的使用示例
2013/11/14 Javascript
封装了jQuery的Ajax请求全局配置
2015/02/05 Javascript
javascript实现实时输出当前的时间
2015/04/27 Javascript
javascript操作表格排序实例分析
2015/05/06 Javascript
详解AngularJS中的表达式使用
2015/06/16 Javascript
每天一篇javascript学习小结(Function对象)
2015/11/16 Javascript
js实现倒计时效果(小于10补零)
2017/03/08 Javascript
Ionic + Angular.js实现验证码倒计时功能的方法
2017/06/12 Javascript
vue.js系列中的vue-fontawesome使用
2018/02/10 Javascript
vue filter 完美时间日期格式的代码
2019/08/14 Javascript
Openlayers显示地理位置坐标的方法
2020/09/28 Javascript
JS绘图Flot应用图形绘制异常解决方案
2020/10/16 Javascript
[01:03:56]Mineski vs TNC 2018国际邀请赛淘汰赛BO1 8.21
2018/08/22 DOTA
python读取Android permission文件
2013/11/01 Python
Python程序员鲜为人知但你应该知道的17个问题
2014/06/04 Python
python打开文件并获取文件相关属性的方法
2015/04/23 Python
Python矩阵常见运算操作实例总结
2017/09/29 Python
python2.7 json 转换日期的处理的示例
2018/03/07 Python
django用户注册、登录、注销和用户扩展的示例
2018/03/19 Python
用于业余项目的8个优秀Python库
2018/09/21 Python
Python 带有参数的装饰器实例代码详解
2018/12/06 Python
python读取txt文件中特定位置字符的方法
2018/12/24 Python
django 利用Q对象与F对象进行查询的实现
2020/05/15 Python
HTML5实现分享到微信好友朋友圈QQ好友QQ空间微博二维码功能
2018/01/03 HTML / CSS
美国电子产品购物网站:BuyDig.com
2020/06/17 全球购物
《石榴》教学反思
2014/03/02 职场文书
党员个人查摆剖析材料
2014/10/16 职场文书
团组织推优材料
2014/12/29 职场文书
2015年爱国卫生月活动总结
2015/03/26 职场文书
python中urllib包的网络请求教程
2022/04/19 Python