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正则
Jul 07 PHP
解决了Ajax、MySQL 和 Zend Framework 的乱码问题
Mar 03 PHP
mysql 性能的检查和优化方法
Jun 21 PHP
php实现的遍历文件夹下所有文件,编辑删除
Jan 05 PHP
PHP 函数学习简单小结
Jul 08 PHP
php Calender(日历)代码分享
Jan 03 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十二)
Jun 25 PHP
php中explode的负数limit用法分析
Feb 27 PHP
Yii2搭建后台并实现rbac权限控制完整实例教程
Apr 28 PHP
Laravel下生成验证码的类
Nov 15 PHP
php 替换文章中的图片路径,下载图片到本地服务器的方法
Feb 06 PHP
基于Laravel-admin 后台的自定义页面用法详解
Sep 30 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写的加密函数,支持私人密钥(详细介绍)
2013/06/09 PHP
php实现下载限制速度示例分享
2014/02/13 PHP
PHP防止注入攻击实例分析
2014/11/03 PHP
基于jQuery的倒计时插件代码
2011/05/07 Javascript
js判断浏览器类型的方法
2013/08/07 Javascript
浅谈Javascript中的Function与Object
2015/01/26 Javascript
JavaScript DOM进阶方法
2015/04/13 Javascript
jquery实现顶部向右伸缩的导航区域代码
2015/09/02 Javascript
Vue.js实战之组件之间的数据传递
2017/04/01 Javascript
Vue非父子组件通信详解
2017/06/12 Javascript
Vue源码分析之Vue实例初始化详解
2019/08/25 Javascript
原生js 实现表单验证功能
2021/02/08 Javascript
[01:07:20]DOTA2-DPC中国联赛 正赛 Dynasty vs XG BO3 第二场 2月2日
2021/03/11 DOTA
Python中使用ConfigParser解析ini配置文件实例
2014/08/30 Python
关于Python正则表达式 findall函数问题详解
2018/03/22 Python
对python的unittest架构公共参数token提取方法详解
2018/12/17 Python
详解程序意外中断自动重启shell脚本(以Python为例)
2019/07/26 Python
python取均匀不重复的随机数方式
2019/11/27 Python
详解Python实现进度条的4种方式
2020/01/15 Python
tensorflow实现将ckpt转pb文件的方法
2020/04/22 Python
详解python UDP 编程
2020/08/24 Python
html5的新玩法——语音搜索
2013/01/03 HTML / CSS
Html5+CSS3+EL表达式问题小结
2020/12/19 HTML / CSS
卫校毕业生自我鉴定
2013/10/31 职场文书
体育教师自荐信范文
2013/12/16 职场文书
管理心得体会
2013/12/28 职场文书
优秀通讯员事迹材料
2014/01/28 职场文书
小小的船教学反思
2014/02/21 职场文书
党的群众路线教育实践活动总结报告
2014/04/28 职场文书
学生未请假就回家检讨书
2014/09/22 职场文书
党员个人批评与自我批评
2014/10/14 职场文书
大学优秀学生主要事迹材料
2015/11/04 职场文书
小学数学教学反思范文
2016/02/16 职场文书
人物搭配车车超萌联名预备中 【咒术迴战】 ⨯ 【天竺鼠车车】 展开合作
2022/04/11 日漫
JAVA 线程池(池化技术)的实现原理
2022/04/28 Java/Android
windows系统搭建WEB服务器详细教程
2022/08/05 Servers