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中HTTP方式下的Gzip压缩传输方法举偶
Feb 15 PHP
php下正则来匹配dede模板标签的代码
Aug 21 PHP
PHP常用开发函数解析之数组篇[未完结]
Jul 30 PHP
php 地区分类排序算法
Jul 01 PHP
PHP中数组的分组排序实例
Jun 01 PHP
PHP把数字转成人民币大写的函数分享
Jun 30 PHP
php上传文件并存储到mysql数据库的方法
Mar 16 PHP
php图片添加水印例子
Jul 20 PHP
PHP图像识别技术原理与实现
Oct 27 PHP
Yii CDBCriteria常用方法实例小结
Jan 19 PHP
swoole_process实现进程池的方法示例
Oct 29 PHP
ThinkPHP5框架中使用JWT的方法示例
Jun 03 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新手上路(十一)
2006/10/09 PHP
PHP中MD5函数使用实例代码
2008/06/07 PHP
深入解析PHP 5.3.x 的strtotime() 时区设定 警告信息修复
2013/08/05 PHP
利用laravel+ajax实现文件上传功能方法示例
2017/08/13 PHP
jquery 实现上下滚动效果示例代码
2013/08/09 Javascript
判断一个变量是数组Array类型的方法
2013/09/16 Javascript
使用jQuery实现星级评分代码分享
2014/12/09 Javascript
jquery仿百度百科底部浮动导航特效
2015/08/08 Javascript
jQuery实现本地预览上传图片功能
2016/01/08 Javascript
JS组件Bootstrap实现下拉菜单效果代码
2016/04/26 Javascript
获取JS中网页各种高宽与位置的方法总结
2016/07/27 Javascript
JS常用函数和常用技巧小结
2016/10/15 Javascript
javascript实现根据函数名称字符串动态执行函数的方法示例
2016/12/28 Javascript
jquery广告无缝轮播实例
2017/01/05 Javascript
jQuery实现二维码扫描功能
2017/01/09 Javascript
微信小程序  checkbox组件详解及简单实例
2017/01/10 Javascript
javascript基础知识之html5轮播图实例讲解(44)
2017/02/17 Javascript
Angular.js中处理页面闪烁的方法详解
2017/03/09 Javascript
Angular多选、全选、批量选择操作实例代码
2017/03/10 Javascript
jquery编写日期选择器
2017/03/16 Javascript
Ajax获取node服务器数据的完整步骤
2020/09/20 Javascript
[43:24]2018DOTA2亚洲邀请赛3月29日 小组赛A组 LGD VS Liquid
2018/03/30 DOTA
[01:14:31]Secret vs VG 2018国际邀请赛淘汰赛BO3 第一场 8.23
2018/08/24 DOTA
python爬虫框架talonspider简单介绍
2017/06/09 Python
使用matplotlib画散点图的方法
2018/05/25 Python
Python使用分布式锁的代码演示示例
2018/07/30 Python
不管你的Python报什么错,用这个模块就能正常运行
2018/09/14 Python
Python中sorted()排序与字母大小写的问题
2020/01/14 Python
详解Python的三种拷贝方式
2020/02/11 Python
使用 Python 在京东上抢口罩的思路详解
2020/02/27 Python
python 高阶函数简单介绍
2021/02/19 Python
美国药妆网站:EDCskincare.com(防晒、痤疮、抗衰老等)
2017/04/28 全球购物
JAVA语言如何进行异常处理,关键字:throws,throw,try,catch,finally分别代表什么意义?在try块中可以抛出异常吗?
2013/07/02 面试题
红旗方阵解说词
2014/02/12 职场文书
大学生秋游活动方案
2014/02/17 职场文书
党员廉政准则心得体会
2016/01/20 职场文书