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 相关文章推荐
一个阿拉伯数字转中文数字的函数
Oct 09 PHP
刚才在简化php的库,结果发现很多东西
Dec 31 PHP
一些被忽视的PHP函数(简单整理)
Apr 30 PHP
PHP is_dir() 判断给定文件名是否是一个目录
May 10 PHP
php中static静态变量的使用方法详解
Jun 04 PHP
codeigniter数据库操作函数汇总
Jun 12 PHP
php定界符
Jun 19 PHP
php使用PDO方法详解
Dec 27 PHP
PHP通过串口实现发送短信
Jul 08 PHP
ThinkPHP中使用Ueditor富文本编辑器
Sep 02 PHP
php微信开发之谷歌测距
Jun 14 PHP
YII2.0框架行为(Behavior)深入详解
Jul 26 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动态创建Flash动画
2006/10/09 PHP
PHP脚本的10个技巧(1)
2006/10/09 PHP
php array_search() 函数使用
2010/04/13 PHP
php 输出双引号"与单引号'的方法
2010/05/09 PHP
php使用socket post数据到其它web服务器的方法
2015/06/02 PHP
微信公众平台开发教程⑤ 微信扫码支付模式介绍
2019/04/10 PHP
用javascript实现的支持lrc歌词的播放器
2007/05/17 Javascript
Extjs学习笔记之五 一个小细节renderTo和applyTo的区别
2010/01/07 Javascript
jquery修改属性值实例代码(设置属性值)
2014/01/06 Javascript
js通过元素class名字获取元素集合的具体实现
2014/01/06 Javascript
jquery和雅虎的yql服务实现天气预报服务示例
2014/02/08 Javascript
jQuery统计指定子元素数量的方法
2015/03/17 Javascript
javascript三元运算符用法实例
2015/04/16 Javascript
javascript用函数实现对象的方法
2015/05/14 Javascript
BootStrap轻松实现微信页面开发代码分享
2016/10/21 Javascript
[js高手之路]原型式继承与寄生式继承详解
2017/08/28 Javascript
jQuery实现的事件绑定功能基本示例
2017/10/11 jQuery
浅谈Vue初学之props的驼峰命名
2018/07/19 Javascript
layui当点击文本框时弹出选择框,显示选择内容的例子
2019/09/02 Javascript
[48:54]VGJ.T vs infamous Supermajor小组赛D组败者组第一轮 BO3 第二场 6.3
2018/06/04 DOTA
pyqt4教程之实现windows窗口小示例分享
2014/03/07 Python
用Python编写一个国际象棋AI程序
2014/11/28 Python
pandas实现选取特定索引的行
2018/04/20 Python
Python高级用法总结
2018/05/26 Python
pycham查看程序执行的时间方法
2018/11/29 Python
python+OpenCV实现图像拼接
2020/03/05 Python
python音频处理的示例详解
2020/12/23 Python
Mankind西班牙男士护肤品网站:购买皮肤护理、护发和剃须
2017/04/27 全球购物
社区食品安全实施方案
2014/03/28 职场文书
艺术学院毕业生自荐信
2014/07/05 职场文书
关于工作时间玩手机的检讨书
2014/09/18 职场文书
2015年干部教育培训工作总结
2015/05/15 职场文书
2016年入党心得体会范文
2016/01/23 职场文书
技术转让协议书
2016/03/19 职场文书
Nginx进程管理和重载原理详解
2021/04/22 Servers
MySQL系列之十四 MySQL的高可用实现
2021/07/02 MySQL