php设计模式学习之单例模式
2024-09-05 11:00:43
某些应用程序资源是独占的,因为有且只有一个此类型的资源。例如,通过数据库句柄到数据库的连接是独占的。您希望在应用程序中共享数据库句柄,因为在保持连接打开或关闭时,它是一种开销,在获取单个页面的过程中更是如此。
单元素模式可以满足此要求。如果应用程序每次包含且仅包含一个对象,那么这个对象就是一个单元素(Singleton)。清单 3 中的代码显示了 PHP V5 中的一个数据库连接单元素。
在程序中,只允许出现一个该对象
class Single
{
public $dbName;
private static $instance = null; private function __construct()
{
echo "hello singe<br/>";
} function __destruct()
{
echo "see you tomorrow<br/>";
} public static function getInstance()
{
if(!self::$instance instanceof self){
self::$instance = new Single();
}
return self::$instance;
} public static function freeSelf()
{
self::$instance = null;
} public function printInfo()
{
echo "this is a single<br/>";
} public function printName()
{
echo "this is a name<br/>";
} public function setDbName($dbName)
{
$this->dbName = $dbName;
} public function getDbName()
{
return $this->dbName;
}
}
$a = Single::getInstance();
$a->setDbName("hello");
echo $a->getDbName()."<br/>";
要点:
1. $instance必须声明为静态的私有变量
2. 构造函数和克隆函数必须声明为私有的,这是为了防止外部程序 new 类从而失去单例模式的意义
3. getInstance()方法必须声明为公有的,必须调用此方法以返回唯一实例的一个引用
4. ::操作符只能访问静态变量或静态函数
5. PHP的单例模式是相对而言的,因为PHP的解释运行机制使得每个PHP页面被解释执行后,所有的相关资源都会被回收。
也就是说,PHP在语言级别上没有办法让某个对象常驻内存。在PHP中,所有的变量都是页面级的,无论是全局变量,
还是类的静态成员,都会在页面执行完毕后被清空,结果会重新建立新的对象,这样也就完全失去了Singleton的意义。
不过,在实际应用中同一个页面中可能会存在多个业务逻辑,这时单例模式就起到了很重要的作用,有效的避免了重复
最新文章
- 三维场景中使用BillBoard技术
- 编写Java应用程序。首先,定义描述学生的类——Student,包括学号(int)、 姓名(String)、年龄(int)等属性;二个方法:Student(int stuNo,String name,int age) 用于对对象的初始化,outPut()用于输出学生信息。其次,再定义一个主类—— TestClass,在主类的main方法中创建多个Student类的对象,使用这些对象来测 试Stud
- asp.net mvc 入门资料
- 深入理解python之self
- angularjs transclude demo
- ProcMon启用调试符
- [转载]Android利用convertView优化ListView性能
- Visual Studio 2010 中的 Web 开发
- HDU1073:Online Judge
- Nexus3 配置3
- .net 调用java service 代理类方法
- 三种dedecms友情链接调用标签
- JDBC 关闭数据库连接与自动提交【转】
- 包建强的培训课程(11):iOS Runtime实战
- Kafka Topic Api
- Qt 获取屏幕信息
- MacOS下IntelliJ IDEA关联JDK1.8源码
- Elasticsearch入门,这一篇就够了
- 微信小程序一些demo链接地址
- Linux 学习手记(2):Linux文件系统的基本结构
热门文章
- webrtc 学习资源 http://www.cnblogs.com/lingyunhu/p/3578218.html
- 快速沃尔什变换(FWT)学习笔记 + 洛谷P4717 [模板]
- 三 vue学习三 从读懂一个Vue项目开始
- Lecture 0 --基本说明
- 3.4-3.6 依据业务需求分析HBase的表设计
- 1.1-1.5 flume架构概述及安装使用
- 1.11-1.12 Sqoop导入数据时两种增量方式导入及direct
- apk重签名的两种方法
- springboot2 -广播式WebSocket
- su和sudo命令的用法