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实现mysql数据库备份类
Mar 20 PHP
php XMLWriter类的简单示例代码(RSS输出)
Sep 30 PHP
php读取csv文件后,uft8 bom导致在页面上显示出现问题的解决方法
Aug 10 PHP
php中利用explode函数分割字符串到数组
Feb 08 PHP
php删除左端与右端空格的方法
Nov 29 PHP
php自定文件保存session的方法
Dec 10 PHP
PHP中strcmp()和strcasecmp()函数字符串比较用法分析
Jan 07 PHP
使用Composer安装Yii框架的方法
Mar 15 PHP
ThinkPHP3.2.3实现分页的方法详解
Jun 03 PHP
yii2多图上传组件的使用教程
May 10 PHP
php 调用百度sms来发送短信的实现示例
Nov 02 PHP
php反射学习之不用new方法实例化类操作示例
Jun 14 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
星际争霸秘籍
2020/03/04 星际争霸
PHP通用检测函数集合
2011/02/08 PHP
PHP学习之数组值的操作
2011/04/17 PHP
JSON两种结构之对象和数组的理解
2016/07/19 PHP
在Laravel中使用DataTables插件的方法
2018/05/29 PHP
thinkPHP+LayUI 流加载实现功能
2019/09/27 PHP
jQuery 数据缓存data(name, value)详解及实现
2010/01/04 Javascript
初学Jquery插件制作 在SageCRM的查询屏幕隐藏部分行的功能
2011/12/26 Javascript
jquery插件如何使用 jQuery操作Cookie插件使用介绍
2012/12/15 Javascript
Javascript玩转继承(一)
2014/05/08 Javascript
jquery用offset()方法获得元素的xy坐标
2014/09/06 Javascript
js数组依据下标删除元素
2015/04/14 Javascript
javascript常见数据验证插件大全
2015/08/03 Javascript
js编写贪吃蛇的小游戏
2020/08/24 Javascript
KnockoutJS 3.X API 第四章之事件event绑定
2016/10/10 Javascript
微信小程序 教程之条件渲染
2016/10/18 Javascript
Vue声明式渲染详解
2017/05/17 Javascript
让网站自动生成章节目录索引的多个js代码
2018/01/07 Javascript
[01:32]DOTA2次级联赛——首支职业女子战队选拔赛全记录
2014/10/23 DOTA
Python的SQLalchemy模块连接与操作MySQL的基础示例
2016/07/11 Python
python使用arcpy.mapping模块批量出图
2017/03/06 Python
Python结巴中文分词工具使用过程中遇到的问题及解决方法
2017/04/15 Python
详解python3中socket套接字的编码问题解决
2017/07/01 Python
使用Python进行防病毒免杀解析
2019/12/13 Python
pytorch实现特殊的Module--Sqeuential三种写法
2020/01/15 Python
基于Python数据分析之pandas统计分析
2020/03/03 Python
关于python中的xpath解析定位
2020/03/06 Python
python 用opencv实现图像修复和图像金字塔
2020/11/27 Python
HTML5实现WebSocket协议原理浅析
2014/07/07 HTML / CSS
全球航班旅行搜索网站:Cheapflights
2017/05/19 全球购物
Jdbc数据访问技术面试题
2012/03/30 面试题
实习单位接收函
2014/01/11 职场文书
班级心理活动总结
2014/07/04 职场文书
弘扬焦裕禄精神践行三严三实心得体会
2014/10/13 职场文书
学生安全责任协议书
2016/03/22 职场文书
MySQL中LAG()函数和LEAD()函数的使用
2022/08/14 MySQL