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 相关文章推荐
Session保存到数据库的php类分享
Oct 24 PHP
解析在apache里面给php写虚拟目录的详细方法
Jun 24 PHP
PHP goto语句简介和使用实例
Mar 11 PHP
Dwz与thinkphp整合下的数据导出到Excel实例
Dec 04 PHP
详解WordPress中简码格式标签编写的基本方法
Dec 22 PHP
PHP框架Laravel插件Pagination实现自定义分页
Apr 22 PHP
smarty循环嵌套用法示例分析
Jul 19 PHP
Laravel5权限管理方法详解
Jul 26 PHP
php技巧小结【推荐】
Jan 19 PHP
php+ajax实现仿百度查询下拉内容功能示例
Oct 20 PHP
PHP7内核CGI与FastCGI详解
Apr 14 PHP
Yii2框架控制器、路由、Url生成操作示例
May 27 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输出英文时间日期的安全方法(RFC 1123格式)
2014/06/13 PHP
PHP处理CSV表格文件的常用操作方法总结
2016/07/01 PHP
php实现xml与json之间的相互转换功能实例
2016/07/07 PHP
Yii2实现多域名跨域同步登录退出
2017/02/04 PHP
PHP实现的文件浏览器功能简单示例
2019/09/12 PHP
Ext 表单布局实例代码
2009/04/30 Javascript
一段实现页面上的图片延时加载的js代码
2010/02/11 Javascript
jQuery实现的产品自动360度旋转展示特效源码分享
2015/08/21 Javascript
基于JavaScript实现移动端点击图片查看大图点击大图隐藏
2015/11/04 Javascript
Angularjs实现mvvm式的选项卡示例代码
2016/09/08 Javascript
概述BootStrap中role="form"及role作用角色
2016/12/08 Javascript
微信小程序图片选择、上传到服务器、预览(PHP)实现实例
2017/05/11 Javascript
AngularJS读取JSON及XML文件的方法示例
2017/05/25 Javascript
web前端vue实现插值文本和输出原始html
2018/01/19 Javascript
说说如何使用Vuex进行状态管理(小结)
2019/04/14 Javascript
vue+mock.js实现前后端分离
2019/07/24 Javascript
[01:06:42]VP vs NewBee Supermajor 胜者组 BO3 第二场 6.5
2018/06/06 DOTA
Python如何获取系统iops示例代码
2016/09/06 Python
python批量替换页眉页脚实例代码
2018/01/22 Python
python如何为被装饰的函数保留元数据
2018/03/21 Python
详解pandas安装若干异常及解决方案总结
2019/01/10 Python
Python直接赋值、浅拷贝与深度拷贝实例分析
2019/06/18 Python
python 循环数据赋值实例
2019/12/02 Python
Mac中PyCharm配置Anaconda环境的方法
2020/03/04 Python
基于Python爬取京东双十一商品价格曲线
2020/10/23 Python
HTML5微信播放全屏问题的解决方法
2017/03/09 HTML / CSS
世界最大的私人旅行指南出版商:孤独星球
2016/08/23 全球购物
美国最大的在线水培用品商店:GrowersHouse.com
2018/08/14 全球购物
法国一家芭蕾舞鞋公司:Repetto
2018/11/12 全球购物
“学雷锋活动月”总结
2014/03/09 职场文书
法人代表委托书
2014/04/04 职场文书
学校综治宣传月活动总结
2014/07/02 职场文书
职工小家建设活动方案
2014/08/25 职场文书
党的群众路线教育实践活动学习笔记范文
2014/11/06 职场文书
2015年社区环境卫生工作总结
2015/04/21 职场文书
JavaScript实现九宫格拖拽效果
2022/06/28 Javascript