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 相关文章推荐
joomla内置的表单验证功能使用方法
Jun 11 PHP
PHP下判断网址是否有效的代码
Oct 08 PHP
php版淘宝网查询商品接口代码示例
Jun 17 PHP
Yii查询生成器(Query Builder)用法实例教程
Sep 04 PHP
PHP中使用SimpleXML检查XML文件结构实例
Jan 07 PHP
php中memcache 基本操作实例
May 17 PHP
PHP实现的蚂蚁爬杆路径算法代码
Dec 03 PHP
PHP微信API接口类
Aug 22 PHP
PHP设计模式之工厂方法设计模式实例分析
Apr 25 PHP
PHP去除空数组且数组键名重置的讲解
Feb 28 PHP
ThinkPHP中图片按比例切割的代码实例
Mar 08 PHP
PHP设计模式之单例模式定义与用法分析
Mar 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中设置、使用、删除Cookie的解决方法
2013/05/06 PHP
PHP中echo,print_r与var_dump区别分析
2014/09/29 PHP
PHP实现多文件上传的方法
2015/07/08 PHP
CentOS下搭建PHP环境与WordPress博客程序的全流程总结
2016/05/07 PHP
如何判断php mysqli扩展类是否开启
2016/12/24 PHP
浅谈Yii乐观锁的使用及原理
2017/07/25 PHP
PHP设计模式之工厂模式详解
2017/10/24 PHP
jquery实现对联广告的方法
2015/02/05 Javascript
jquery遍历table的tr获取td的值实现方法
2016/05/19 Javascript
jQuery ajaxSubmit 实现ajax提交表单局部刷新
2016/07/04 Javascript
vue.js 1.x与2.0中js实时监听input值的变化
2017/03/15 Javascript
Vue响应式原理详解
2017/04/18 Javascript
微信小程序动态显示项目倒计时效果
2017/06/13 Javascript
JS实现字符串翻转的方法分析
2018/08/31 Javascript
Vue v-bind动态绑定class实例方法
2020/01/15 Javascript
Python中zfill()方法的使用教程
2015/05/20 Python
机器学习python实战之手写数字识别
2017/11/01 Python
python3+dlib实现人脸识别和情绪分析
2018/04/21 Python
使用Django启动命令行及执行脚本的方法
2018/05/29 Python
Python使用gRPC传输协议教程
2018/10/16 Python
python爬虫项目设置一个中断重连的程序的实现
2019/07/26 Python
python实现屏保程序(适用于背单词)
2019/07/30 Python
简单了解python中的与或非运算
2019/09/18 Python
python如何从文件读取数据及解析
2019/09/19 Python
python接入支付宝的实例操作
2020/07/20 Python
JACK & JONES英国官方网站:欧洲领先的男装生产商
2017/09/27 全球购物
东方红海科技面试题软件测试方面
2012/02/08 面试题
信息技术专业大学生个人的自我评价
2013/10/05 职场文书
物业管理应届生求职信
2013/10/28 职场文书
中秋节主持词
2014/04/02 职场文书
访谈节目策划方案
2014/05/15 职场文书
预备党员公开承诺书
2014/05/28 职场文书
教师党员岗位承诺书
2014/05/29 职场文书
纪检干部个人对照检查材料
2014/09/23 职场文书
车辆转让协议书
2014/09/24 职场文书
python pygame 开发五子棋双人对弈
2022/05/02 Python