PHP设计模式--单例模式
来源:互联网 发布:python sort函数 编辑:程序博客网 时间:2024/06/05 09:52
单例模式的必要性:
1. 目的:确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。
2. 要点:
1). 某一个类只能有一个实例;
2). 必须自行创建这个实例;
3). 必须自行向整个系统提供这个实例。
3. 作用:避免重复实例化,节省系统资源。例如在数据库操作方面,会大量存在数据库连接操作,单例类可以避免多次连接数据库而消耗资源,减轻对数据库服务器的压力。
单例类的写法:三私一公二静态
1、私有的构造方法:防止类外被实例化,从而失去单例的意义。
2、私有克隆方法:防止传到类外的对象被克隆,从而无法保证对象的唯一。
3、私有静态的属性:私有的目的是防止这个属性在类外被修改。用来保存在本类中生成的唯一一个实例。 静态的目的是什么呢?之所以静态,是因为该属性要被在静态方法中调用。
4、共有的静态方法:这个方法是唯一将实例传输到类外使用的途径。子所以是公有的,是因为要被在类外调用。之所以静态,是因为单例类中的构造方法是私有的,没办法用对象调用该方法,而只有静态方法才不需要对象调用。
这个公有的静态方法必须有返回值,将当前类中私有静态属性返回。而这个静态属性中已经存储了那个唯一的实例化后的对象。
备注:单例模式强调类的静态调用,保证一个进程对一个类的多次调用只产生一个对象。
案例 --- 连接数据库单例类
class Dbconn { public $link; private static $_instance; private function __construct() { //连接数据库操作 } private function __clone(){} public static function getInstance() { //判断当前私有的属性$_instance是否是经过自身实例化来的一个对象? if(!self::$_instance instanceof self) { self::$_instance = new self(); } return self::$_instance; } }
<span style="font-size:18px;color:#999999;">/*** 单例模式数据库连接项目实例*/</span>
<pre name="code" class="php">class Dbconn { public $link; private static $_instance; private function __construct() { $arr=Loadconfig::getConfig(); //钩子方法 $mylink=mysql_connect($arr['hostname'] , $arr['username'] , $arr['password']); if($mylink){ mysql_query('set names '. $arr['charset']); if(mysql_select_db($arr['dbname'])) { $this->link = $mylink; } else { die('数据库连接失败'); } } else { die('连接数据库服务器失败'); } } //私有化,禁止克隆这个对象 private function __clone() {} //这个方法是为了获取一次实例,也就是一次数据库连接对象。 //必须通过此方法得到对象的引用 这个类用了单例模式的写法 public static function getInstance() { if(!self::$_instance instanceof self) { self::$_instance = new self(); } return self::$_instance; }</pre><br> <br> <pre></pre> <pre></pre>
0 0
- PHP 单例设计模式
- php单例设计模式
- 【PHP设计模式】单例模式
- php设计模式之单例模式
- 设计模式php实例:单例模式
- PHP设计模式之:单例模式
- PHP设计模式之单例模式
- PHP设计模式-单例模式
- PHP 设计模式之单例模式
- PHP设计模式之:单例模式
- PHP设计模式-单例模式
- php设计模式之单例模式
- PHP设计模式之:单例模式
- php设计模式-单例模式
- PHP设计模式之:单例模式
- php设计模式笔记:单例模式
- php设计模式-单例模式
- PHP设计模式之:单例模式
- 工作流Activiti的学习总结(九)Activiti手工执行的应用(ReceiveTask实现方式)
- codeforces 624d 623b Array GCD ★ ★
- Service一基础
- hdu5752 2016 Multi-University Training Contest 3 Sqrt Bo 解题报告
- 线程同步
- PHP设计模式--单例模式
- 二叉搜索树
- 字符编码ASCII, Unicode和UTF-8概念扫盲
- Linux文件删除原理:
- qt 文件对话框的使用
- linux上使用libfreenect2从kinect2获取数据
- Core Image Programming Guide(留给自己看的)
- Android: Material Design 简单介绍(3)
- LINUX环境安装ORACLE客户端