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 相关文章推荐
用文本作数据处理
Oct 09 PHP
模仿OSO的论坛(二)
Oct 09 PHP
针对初学PHP者的疑难问答(2)
Oct 09 PHP
php基础知识:类与对象(2) 自动加载对象
Dec 13 PHP
php设计模式 Mediator (中介者模式)
Jun 26 PHP
PHP array_multisort()函数的使用札记
Jul 03 PHP
PHP无刷新上传文件实现代码
Sep 19 PHP
关于js与php互相传值的介绍
Jun 25 PHP
php实现图片转换成ASCII码的方法
Apr 03 PHP
PHP的Yii框架中过滤器相关的使用总结
Mar 29 PHP
PHP排序算法之堆排序(Heap Sort)实例详解
Apr 21 PHP
PHP抽象类基本用法示例
Dec 28 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的Yii框架中请求与响应的处理流程
2016/03/17 PHP
php注册审核重点解析(数据访问)
2017/05/23 PHP
php 中phar包的使用教程详解
2018/10/26 PHP
超棒的javascript页面顶部卷动广告效果
2007/12/01 Javascript
JQuery 前台切换网站的样式实现
2009/06/22 Javascript
AngularJS基础 ng-csp 指令详解
2016/08/01 Javascript
js判断是否为空和typeof的用法(详解)
2016/10/07 Javascript
JS异步文件上传(兼容IE8+)
2017/04/02 Javascript
详解利用Angular实现多团队模块化SPA开发框架
2017/11/27 Javascript
jQuery EasyUI 折叠面板accordion的使用实例(分享)
2017/12/25 jQuery
ES6使用export和import实现模块化的方法
2018/09/10 Javascript
详解Webstorm 下的Angular2.0开发之路(图文)
2018/12/06 Javascript
jQuery实现带3D切割效果的轮播图功能示例【附源码下载】
2019/04/04 jQuery
Vue起步(无cli)的啊教程详解
2019/04/11 Javascript
分享Angular http interceptors 拦截器使用(推荐)
2019/11/10 Javascript
js数组相减简单示例【删除a数组所有与b数组相同元素】
2020/03/04 Javascript
详解如何在vue+element-ui的项目中封装dialog组件
2020/12/11 Vue.js
[03:01]DOTA2英雄基础教程 露娜
2014/01/07 DOTA
python采集博客中上传的QQ截图文件
2014/07/18 Python
python之wxPython应用实例
2014/09/28 Python
Python3实现并发检验代理池地址的方法
2016/09/18 Python
名片管理系统python版
2018/01/11 Python
python生成ppt的方法
2018/06/07 Python
python pandas修改列属性的方法详解
2018/06/09 Python
Python3使用turtle绘制超立方体图形示例
2018/06/19 Python
python flask实现分页的示例代码
2018/08/02 Python
Django扫码抽奖平台的配置过程详解
2021/01/14 Python
关于box-sizing的全面理解
2016/07/28 HTML / CSS
美国女性服饰销售网站:Nasty Gal(坏女孩)
2016/07/26 全球购物
英国家喻户晓的高街品牌:River Island
2017/11/28 全球购物
如何转换一个字符串到enum值
2014/04/12 面试题
建筑工程自我鉴定
2013/10/18 职场文书
最新教师自我评价分享
2013/11/12 职场文书
新员工入职感言
2014/02/01 职场文书
行政人事主管岗位职责
2015/04/11 职场文书
RestTemplate如何通过HTTP Basic Auth认证示例说明
2022/03/17 Java/Android