PHP最常用的2种设计模式工厂模式和单例模式介绍


Posted in PHP onAugust 14, 2012

1.工厂模式
主要作用是降低耦合度。

abstract class Operation{ 
abstract public function getValue($num1,$num2); 
public function getAttr(){ 
return 1; 
} 
} 
class Add extends Operation{ 
public function getValue($num1, $num2){ 
return $num1+$num2; 
} 
} 
class Sub extends Operation{ 
public function getValue($num1, $num2){ 
return $num1-$num2; 
} 
} 
class Factory{ 
public static function CreateObj($operation){ 
switch ($operation){ 
case '+': return new Add(); 
case '-': return new Sub(); 
} 
} 
} 
$Op=Factory::CreateObj('-'); 
echo $Op->getValue(3, 6);

用在真正开发中一般当做数据库选择类。
2单例模式
单例是因为一个就足够了,多了浪费。比如邮局里的电话簿只有一本,有需要的人拿来看,没有必要每个人要查的时候工作人员就拿一本出来,看完了再回收。
class Mysql{ 
public static $conn; 
public static function getInstance(){ 
if (!self::$conn){ 
new self(); 
return self::$conn; 
}else { 
return self::$conn; 
} 
} 
private function __construct(){ 
self::$conn= "mysql_connect:";// mysql_connect('','','') 
} 
public function __clone() 
{ 
trigger_error("Only one connection"); 
} 
} 
echo Mysql::getInstance(); 
echo Mysql::getInstance();

实际中用作数据库连接类和工厂模式一起使用,根据参数调用单例模式,可以提高资源使用效率。
PHP 相关文章推荐
简单的php 验证图片生成函数
May 21 PHP
新浪微博API开发简介之用户授权(PHP基础篇)
Sep 25 PHP
php中防止SQL注入的最佳解决方法
Apr 25 PHP
在Ubuntu 14.04上部署 PHP 环境及 WordPress
Sep 02 PHP
PHP中strtr字符串替换用法详解
Nov 26 PHP
PHP利用APC模块实现大文件上传进度条的方法
Oct 29 PHP
PHP使用fopen与file_get_contents读取文件实例分享
Mar 04 PHP
Mac系统完美安装PHP7详细教程
Jun 06 PHP
PHP按符号截取字符串的指定部分的实现方法
Sep 10 PHP
详解php伪造Referer请求反盗链资源
Jan 24 PHP
laravel高级的Join语法详解以及使用Join多个条件
Oct 16 PHP
Mac M1安装mnmp (Mac+Nginx+MySQL+PHP) 开发环境
Mar 29 PHP
php调用dll的实例操作动画与代码分享
Aug 14 #PHP
php中计算未知长度的字符串哪个字符出现的次数最多的代码
Aug 14 #PHP
PhpMyAdmin出现export.php Missing parameter: what /export_type错误解决方法
Aug 09 #PHP
通过5个php实例细致说明传值与传引用的区别
Aug 08 #PHP
php调用方法mssql_fetch_row、mssql_fetch_array、mssql_fetch_assoc和mssql_fetch_objcect读取数据的区别
Aug 08 #PHP
php中++i 与 i++ 的区别
Aug 08 #PHP
php中判断文件空目录是否有读写权限的函数代码
Aug 07 #PHP
You might like
PHP中使用gettext来支持多语言的方法
2011/05/02 PHP
php对象和数组相互转换的方法
2015/05/12 PHP
修改Laravel5.3中的路由文件与路径
2016/08/10 PHP
PHP yield关键字功能与用法分析
2019/01/03 PHP
document.onreadystatechange事件的用法分析
2009/10/17 Javascript
jQuery 树形结构的选择器
2010/02/15 Javascript
jquery无刷新验证邮箱地址实现实例
2014/02/19 Javascript
javascript的tab切换原理与效果实现方法
2015/01/10 Javascript
JS鼠标拖拽实例分析
2015/11/23 Javascript
如何利用AngularJS打造一款简单Web应用
2015/12/05 Javascript
理解Angular数据双向绑定
2016/01/10 Javascript
jQuery过滤特殊字符及JS字符串转为数字
2016/05/26 Javascript
angular十大常见问题
2017/03/07 Javascript
jQuery插件FusionWidgets实现的Bulb图效果示例【附demo源码下载】
2017/03/23 jQuery
Angular2数据绑定详解
2017/04/18 Javascript
Vue如何实现组件的源码解析
2017/06/08 Javascript
vue.js中v-on:textInput无法执行事件问题的解决过程
2017/07/12 Javascript
JS实现闭包中的沙箱模式示例
2017/09/07 Javascript
Python的Tornado框架异步编程入门实例
2015/04/24 Python
Python实现判断字符串中包含某个字符的判断函数示例
2018/01/08 Python
Python实现Dijkstra算法
2018/10/17 Python
pyqt5 键盘监听按下enter 就登陆的实例
2019/06/25 Python
python安装virtualenv虚拟环境步骤图文详解
2019/09/18 Python
您在慕尼黑的跑步商店:Lauf-bar
2019/10/11 全球购物
如何查找网页漏洞
2016/06/22 面试题
介绍一下JMS编程步骤
2015/09/22 面试题
应届毕业生通用的自荐书范文
2014/02/07 职场文书
主管竞聘书范文
2014/03/31 职场文书
大学新闻系自荐书
2014/05/31 职场文书
社区服务标语
2014/07/01 职场文书
党员志愿者活动方案
2014/08/28 职场文书
大学生学习新党章思想汇报
2014/10/25 职场文书
2015年建筑工程工作总结
2015/05/13 职场文书
2016社区平安家庭事迹材料
2016/02/26 职场文书
八年级地理课件资料及考点知识分享
2019/08/30 职场文书
python使用PySimpleGUI设置进度条及控件使用
2021/06/10 Python