PHP设计模式之:单例模式
前些日子开始着真正的去了解下设计模式,开始么,简单地从单例模式开始,当然网上看了一些资料,单例模式比较好理解,看看介绍,然后看看代码基本也就能够理解了,设计模式这些的花点心思基本的是能够理解的,当然要想很好的运用到项目上也是需要一定的实践,不能只是知道了解,或者说的是很厉害很懂的,一到要实际操作就不行了,废话就不多说了,PHP战线上的同志们都加油吧;
单例模式(职责模式):
简单的说,一个对象(在学习设计模式之前,需要比较了解面向对象思想)只负责一个特定的任务;
单例类:
1、构造函数需要标记为private(访问控制:防止外部代码使用new操作符创建对象),单例类不能在其他类中实例化,只能被其自身实例化;
2、拥有一个保存类的实例的静态成员变量
3、拥有一个访问这个实例的公共的静态方法(常用getInstance()方法进行实例化单例类,通过instanceof操作符可以检测到类是否已经被实例化)
另外,需要创建__clone()方法防止对象被复制(克隆)
为什么要使用PHP单例模式?
1、php的应用主要在于数据库应用, 所以一个应用中会存在大量的数据库操作, 使用单例模式, 则可以避免大量的new 操作消耗的资源。
2、如果系统中需要有一个类来全局控制某些配置信息, 那么使用单例模式可以很方便的实现. 这个可以参看ZF的FrontController部分。
3、在一次页面请求中, 便于进行调试, 因为所有的代码(例如数据库操作类db)都集中在一个类中, 我们可以在类中设置钩子, 输出日志,从而避免到处var_dump, echo。
代码实现:
1 <?php 2 /1** 3 * 设计模式之单例模式 4 * $_instance必须声明为静态的私有变量 5 * 构造函数和析构函数必须声明为私有,防止外部程序new 6 * 类从而失去单例模式的意义 7 * getInstance()方法必须设置为公有的,必须调用此方法 8 * 以返回实例的一个引用 9 * ::操作符只能访问静态变量和静态函数 10 * new对象都会消耗内存 11 * 使用场景:最常用的地方是数据库连接。 12 * 使用单例模式生成一个对象后, 13 * 该对象可以被其它众多对象所使用。 14 */ 15 class Danli { 16 17 //保存类实例的静态成员变量 18 private static $_instance; 19 20 //private标记的构造方法 21 private function __construct(){ 22 echo 'This is a Constructed method;'; 23 } 24 25 //创建__clone方法防止对象被复制克隆 26 public function __clone(){ 27 trigger_error('Clone is not allow!',E_USER_ERROR); 28 } 29 30 //单例方法,用于访问实例的公共的静态方法 31 public static function getInstance(){ 32 if(!(self::$_instance instanceof self)){ 33 self::$_instance = new self; 34 } 35 return self::$_instance; 36 } 37 38 public function test(){ 39 echo '调用方法成功'; 40 } 41 42 } 43 44 //用new实例化private标记构造函数的类会报错 45 //$danli = new Danli(); 46 47 //正确方法,用双冒号::操作符访问静态方法获取实例 48 $danli = Danli::getInstance(); 49 $danli->test(); 50 51 //复制(克隆)对象将导致一个E_USER_ERROR 52 $danli_clone = clone $danli;
转载于:https://www.cnblogs.com/zhangchuan/archive/2013/05/17/3083132.html
PHP设计模式之:单例模式相关推荐
- socket可以写成单例嘛_精读《设计模式 - Singleton 单例模式》
Singleton(单例模式) Singleton(单例模式)属于创建型模式,提供一种对象获取方式,保证在一定范围内是唯一的. 意图:保证一个类仅有一个实例,并提供一个访问它的全局访问点. 其实单例模 ...
- C#设计模式(1)——单例模式
原文地址:http://www.cnblogs.com/zhili/p/SingletonPatterm.html 一.引言 最近在设计模式的一些内容,主要的参考书籍是<Head First 设 ...
- java设计模式之单例模式(七种方法)
单例模式:个人认为这个是最简单的一种设计模式,而且也是在我们开发中最常用的一个设计模式. 单例模式的意思就是只有一个实例.单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例.这个 ...
- java单例模式的七种写法_Java设计模式之单例模式的七种写法
什么是单例模式? 单例模式是一种常见的设计模式,单例模式的写法有很多种,这里主要介绍三种: 懒汉式单例模式.饿汉式单例模式.登记式单例 . 单例模式有以下特点: 1.单例类只能有一个实例. 2.单例类 ...
- go设计模式之单例模式
在这里插入图片描述# go设计模式之单例模式 在软件开发时,经常会遇到有些对象需要保证只有一个实例的,那么这种设计模式就应用而生. 定义 单例模式,也叫单子模式,是一种常用的软件设计模式,属于创建型模 ...
- 一篇博客读懂设计模式之---单例模式
一篇博客读懂设计模式之---单例模式 一. 单例模式 单例对象(Singleton)是一种常用的设计模式.在Java应用中,单例对象能保证在一个JVM中,该对象只有一个实例存在.这样的模式有几个好处 ...
- Java 设计模式(3)单例模式
前言 概念: java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主要介绍三种:懒汉式单例.饿汉式单例.登记式单例. 单例模式有以下特点: 1.单例类只能有一个实例. 2.单例类必须自 ...
- socket可以写成单例嘛_精读设计模式 Singleton 单例模式
Singleton(单例模式) Singleton(单例模式)属于创建型模式,提供一种对象获取方式,保证在一定范围内是唯一的. 意图:保证一个类仅有一个实例,并提供一个访问它的全局访问点. 其实单例模 ...
- 设计模式之单例模式——Singleton
设计模式之单例模式--Singleton 设计意图: 保证类仅有一个实例,并且可以供应用程序全局使用.为了保证这一点,就需要这个类自己创建自己的对象,并且对外有 ...
- 实践GoF的设计模式:单例模式
本文分享自华为云社区<[Go实现]实践GoF的23种设计模式:单例模式>,作者: 元闰子. 简述 GoF 对单例模式(Singleton)的定义如下: Ensure a class onl ...
最新文章
- 各种光学仪器成像技术(上)
- 如何对比_潭酒红潭酱酒对比红花郎怎么样口感如何
- “中国风”拯救国货彩妆?
- SAP JAM活跃度统计
- [渝粤教育] 广东-国家-开放大学 21秋期末考试建筑设备10327k1
- Spring boot MultipartResolver
- 对话MySQL之父:代码一次性完成才是优秀程序员
- java8时间类的好处_Java8——时间类
- 人工智能专业应不应该读博士?
- 漫谈CRM体系化建设2 – 如何开发客户?
- java 打印星号_JAVA打印星号
- 中央处理器(CPU)
- php wget下载图片,如何通过php或wget从Slack下载图像
- oracle 行列转换函数
- mysql 优化总结
- 常见的 PHP IDE 开发工具汇总 (LAMP)
- Python爬虫教程:微医挂号网医生数据抓取
- Android网络请求归纳 HttpUrlConnection| Vollety|OKHttp3|Retrofit2
- 不止会下棋,人工智能还能高考阅卷
- 我的 Docker 卡死了,怎么办?在线等
热门文章
- stm32存储结构 存储器映射
- linux服务器nvidia驱动的安装与卸载
- linux命令行如何换行,一行命令太长,看的不清晰,
- 手机壳鸿蒙,手机壳黑榜发布 真相太惊人!
- php的cookie不存在会是什么值,PHP setcookie() 首次存储不上值
- mysql字段说明_mysql 字段类型说明
- Linux网络编程---详解TCP
- esp32原理图设计_第十一章 ESP32的PWM全彩LED灯显示
- 最小径集的算法_如何为数据集选择正确的聚类算法?
- MongoDB 里面日期查询的问题