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
smarty 原来也不过如此~~呵呵
Nov 25 PHP
php split汉字
Jun 05 PHP
同台服务器使用缓存APC效率高于Memcached的演示代码
Feb 16 PHP
PHP的autoload自动加载机制使用说明
Dec 28 PHP
PHP递归算法的详细示例分析
Feb 19 PHP
php过滤敏感词的示例
Mar 31 PHP
php计算函数执行时间的方法
Mar 20 PHP
php从文件夹随机读取文件的方法
Jun 01 PHP
php使用parse_str实现查询字符串解析到变量中的方法
Feb 17 PHP
laravel5.4生成验证码的实例讲解
Aug 05 PHP
PHP实现的链式队列结构示例
Sep 15 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实现下载CSS文件中的图片
2015/12/06 PHP
浅谈php中的循环while、do...while、for、foreach四种循环
2016/11/05 PHP
PHP实现给定一列字符,生成指定长度的所有可能组合示例
2019/06/22 PHP
jquery实现控制表格行高亮实例
2013/06/05 Javascript
JavaScript实现twitter puddles算法实例
2014/12/06 Javascript
jQuery实现带有动画效果的回到顶部和底部代码
2015/11/04 Javascript
值得分享的轻量级Bootstrap Table表格插件
2016/05/30 Javascript
javascript 中的console.log和弹出窗口alert
2016/08/30 Javascript
简单实现JS倒计时效果
2016/12/23 Javascript
微信小程序-获得用户输入内容
2017/02/13 Javascript
jquery实现tab选项卡切换效果(悬停、下方横线动画位移)
2017/05/05 jQuery
使用Vue写一个datepicker的示例
2018/01/27 Javascript
微信小程序实现页面下拉刷新和上拉加载功能详解
2018/12/03 Javascript
Django模板继承 extend标签实例代码详解
2019/05/16 Javascript
浅谈vue获得后台数据无法显示到table上面的坑
2020/08/13 Javascript
Python函数式编程指南(二):从函数开始
2015/06/24 Python
详细介绍Python的鸭子类型
2016/09/12 Python
Python爬虫实现网页信息抓取功能示例【URL与正则模块】
2017/05/18 Python
Python自动化运维之IP地址处理模块详解
2017/12/10 Python
flask中主动抛出异常及统一异常处理代码示例
2018/01/18 Python
Python 学习教程之networkx
2019/04/15 Python
利用PyCharm Profile分析异步爬虫效率详解
2019/05/08 Python
Python分布式进程中你会遇到的问题解析
2019/05/28 Python
Python代码块及缓存机制原理详解
2019/12/13 Python
python with (as)语句实例详解
2020/02/04 Python
python dumps和loads区别详解
2020/02/04 Python
如何使用Python调整图像大小
2020/09/26 Python
CSS3中HSL和HSLA的简单使用示例
2015/07/14 HTML / CSS
公务员的自我鉴定
2013/10/26 职场文书
我们的节日端午节活动方案
2014/03/02 职场文书
公益广告语集锦
2014/03/13 职场文书
淘宝店策划方案
2014/06/07 职场文书
防灾减灾活动总结
2014/08/30 职场文书
2015年感恩母亲节的演讲稿
2015/03/18 职场文书
Win11 Build 21996.1 Dev版怎么样? win11系统截图欣赏
2021/11/21 数码科技
Android Canvas绘制文字横纵向对齐
2022/06/05 Java/Android