基于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 相关文章推荐
用Zend Encode编写开发PHP程序
Oct 09 PHP
一个php作的文本留言本的例子(六)
Oct 09 PHP
用文本文件制作留言板提示(下)
Oct 09 PHP
PHP中CURL方法curl_setopt()函数的参数分享
Jan 19 PHP
深入PHP购物车模块功能分析(函数讲解,附源码)
Jun 25 PHP
PHP取整函数:ceil,floor,round,intval的区别详细解析
Aug 31 PHP
PHP面向对象程序设计之接口用法
Aug 20 PHP
简单谈谈php延迟静态绑定
Jan 26 PHP
Yii2 rbac权限控制之菜单menu实例教程
Apr 28 PHP
总结的一些PHP开发中的tips(必看篇)
Mar 24 PHP
PHP给源代码加密的几种方法汇总(推荐)
Feb 06 PHP
laravel 解决后端无法获取到前端Post过来的值问题
Oct 22 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
Ha0k 0.3 PHP 网页木马修改版
2009/10/11 PHP
PHP+Mysql+jQuery实现发布微博程序 php篇
2015/10/15 PHP
Yii2中cookie用法示例分析
2016/07/18 PHP
PHP如何解决微信文章图片防盗链
2020/12/09 PHP
定时器(setTimeout/setInterval)调用带参函数失效解决方法
2013/03/26 Javascript
jquery获取对象的方法足以应付常见的各种类型的对象
2014/05/14 Javascript
window.open不被拦截的简单实现代码(推荐)
2016/08/04 Javascript
详解百度百科目录导航树小插件
2017/01/08 Javascript
bootstrap警告框使用方法解析
2017/01/13 Javascript
JavaScript轻松创建级联函数的方法示例
2017/02/10 Javascript
js代码延迟一定时间后执行一个函数的实例
2017/02/15 Javascript
轻松实现jQuery添加删除按钮Click事件
2017/03/13 Javascript
vue.js事件处理器是什么
2017/03/20 Javascript
详解AngularJs HTTP响应拦截器实现登陆、权限校验
2017/04/11 Javascript
详细介绍RxJS在Angular中的应用
2017/09/23 Javascript
React中的render何时执行过程
2018/04/13 Javascript
nuxt.js中间件实现拦截权限判断的方法
2018/11/21 Javascript
element ui table(表格)实现点击一行展开功能
2018/12/04 Javascript
angular4自定义组件非input元素实现ngModel双向数据绑定的方法
2018/12/28 Javascript
使用 Angular RouteReuseStrategy 缓存(路由)组件的实例代码
2019/11/01 Javascript
vue 中url 链接左边的小图标更改问题
2019/12/30 Javascript
JS轮播图的实现方法
2020/08/24 Javascript
Python3.0与2.X版本的区别实例分析
2014/08/25 Python
Python语言实现获取主机名根据端口杀死进程
2016/03/31 Python
pandas取出重复数据的方法
2019/07/04 Python
使用CSS实现阅读进度条
2017/02/27 HTML / CSS
日本航空官方网站:JAL
2019/06/19 全球购物
地理教师岗位职责
2014/03/16 职场文书
电子商务助理求职自荐信
2014/04/10 职场文书
市场营销调查计划书
2014/05/02 职场文书
竞选演讲稿范文大全
2014/05/12 职场文书
2014县政府领导班子三严三实对照检查材料思想汇报
2014/09/26 职场文书
给老婆的检讨书1000字
2015/01/01 职场文书
司考复习计划
2015/01/19 职场文书
MySQL创建索引需要了解的
2021/04/08 MySQL
详解Django中 render() 函数的使用方法
2021/04/22 Python