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新手上路(六)
Oct 09 PHP
php中的PHP_EOL换行符详细解析
Oct 26 PHP
PHP实现的多彩标签效果代码分享
Aug 21 PHP
php获取指定范围内最接近数的方法
Jun 02 PHP
php实现用已经过去多长时间的方式显示时间
Jun 05 PHP
PHP各种异常和错误的拦截方法及发生致命错误时进行报警
Jan 19 PHP
Laravel5.1数据库连接、创建数据库、创建model及创建控制器的方法
Mar 29 PHP
laravel学习教程之关联模型
Jul 30 PHP
谈谈PHP连接Access数据库的注意事项
Aug 12 PHP
PHP简单实现防止SQL注入的方法
Mar 13 PHP
thinkphp5框架实现的自定义扩展类操作示例
May 16 PHP
laravel框架中间件简单使用方法示例
Jan 25 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
kohana框架上传文件验证规则写法示例
2014/07/14 PHP
thinkphp配置连接数据库技巧
2014/12/02 PHP
php生成短域名函数
2015/03/23 PHP
深入剖析PHP中printf()函数格式化使用
2016/05/23 PHP
php封装的mysqli类完整实例
2016/10/18 PHP
php与c 实现按行读取文件实例代码
2017/01/03 PHP
php基于dom实现读取图书xml格式数据的方法
2017/02/03 PHP
PHP开发之归档格式phar文件概念与用法详解【创建,使用,解包还原提取】
2017/11/17 PHP
PHP实现的大文件切割与合并功能示例
2018/04/10 PHP
tp5实现微信小程序多图片上传到服务器功能
2018/07/16 PHP
input禁止键盘及中文输入,但可以点击
2014/02/13 Javascript
基于JS实现PHP的sprintf函数实例
2015/11/14 Javascript
JQuery组件基于Bootstrap的DropDownList(完整版)
2016/07/05 Javascript
从零开始学习Node.js系列教程之SQLite3和MongoDB用法分析
2017/04/13 Javascript
ReactNative列表ListView的用法
2017/08/02 Javascript
js验证身份证号码记录的方法
2019/04/26 Javascript
解决layer弹出层中表单不起作用的问题
2019/09/09 Javascript
JS实现音量控制拖动
2020/01/15 Javascript
使用Vue实现简单计算器
2020/02/25 Javascript
JS 创建对象的模式实例小结
2020/04/28 Javascript
python实现中文转换url编码的方法
2016/06/14 Python
转换科学计数法的数值字符串为decimal类型的方法
2018/07/16 Python
Python实现微信小程序支付功能
2019/07/25 Python
python画微信表情符的实例代码
2019/10/09 Python
python Pillow图像处理方法汇总
2019/10/16 Python
matplotlib自定义鼠标光标坐标格式的实现
2021/01/08 Python
canvas基础之图形验证码的示例
2018/01/02 HTML / CSS
英国人最爱的饰品网站:Accessorize
2016/08/22 全球购物
美国畅销的跑步机品牌:ProForm
2017/02/06 全球购物
美国知名的家庭连锁百货商店:Boscov’s
2017/07/27 全球购物
俄罗斯花园种植材料批发和零售网上商店:Беккер
2019/07/22 全球购物
党员个人思想汇报
2013/12/28 职场文书
五一服装活动方案
2014/01/11 职场文书
计划生育宣传标语
2014/06/21 职场文书
python scrapy简单模拟登录的代码分析
2021/07/21 Python
springboot创建的web项目整合Quartz框架的项目实践
2022/06/21 Java/Android