前些日子开始着真正的去了解下设计模式,开始么,简单地从单例模式开始,当然网上看了一些资料,单例模式比较好理解,看看介绍,然后看看代码基本也就能够理解了,设计模式这些的花点心思基本的是能够理解的,当然要想很好的运用到项目上也是需要一定的实践,不能只是知道了解,或者说的是很厉害很懂的,一到要实际操作就不行了,废话就不多说了,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设计模式之:单例模式相关推荐

  1. socket可以写成单例嘛_精读《设计模式 - Singleton 单例模式》

    Singleton(单例模式) Singleton(单例模式)属于创建型模式,提供一种对象获取方式,保证在一定范围内是唯一的. 意图:保证一个类仅有一个实例,并提供一个访问它的全局访问点. 其实单例模 ...

  2. C#设计模式(1)——单例模式

    原文地址:http://www.cnblogs.com/zhili/p/SingletonPatterm.html 一.引言 最近在设计模式的一些内容,主要的参考书籍是<Head First 设 ...

  3. java设计模式之单例模式(七种方法)

    单例模式:个人认为这个是最简单的一种设计模式,而且也是在我们开发中最常用的一个设计模式. 单例模式的意思就是只有一个实例.单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例.这个 ...

  4. java单例模式的七种写法_Java设计模式之单例模式的七种写法

    什么是单例模式? 单例模式是一种常见的设计模式,单例模式的写法有很多种,这里主要介绍三种: 懒汉式单例模式.饿汉式单例模式.登记式单例 . 单例模式有以下特点: 1.单例类只能有一个实例. 2.单例类 ...

  5. go设计模式之单例模式

    在这里插入图片描述# go设计模式之单例模式 在软件开发时,经常会遇到有些对象需要保证只有一个实例的,那么这种设计模式就应用而生. 定义 单例模式,也叫单子模式,是一种常用的软件设计模式,属于创建型模 ...

  6. 一篇博客读懂设计模式之---单例模式

    一篇博客读懂设计模式之---单例模式 一.  单例模式 单例对象(Singleton)是一种常用的设计模式.在Java应用中,单例对象能保证在一个JVM中,该对象只有一个实例存在.这样的模式有几个好处 ...

  7. Java 设计模式(3)单例模式

    前言 概念: java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主要介绍三种:懒汉式单例.饿汉式单例.登记式单例. 单例模式有以下特点: 1.单例类只能有一个实例. 2.单例类必须自 ...

  8. socket可以写成单例嘛_精读设计模式 Singleton 单例模式

    Singleton(单例模式) Singleton(单例模式)属于创建型模式,提供一种对象获取方式,保证在一定范围内是唯一的. 意图:保证一个类仅有一个实例,并提供一个访问它的全局访问点. 其实单例模 ...

  9. 设计模式之单例模式——Singleton

                        设计模式之单例模式--Singleton 设计意图: 保证类仅有一个实例,并且可以供应用程序全局使用.为了保证这一点,就需要这个类自己创建自己的对象,并且对外有 ...

  10. 实践GoF的设计模式:单例模式

    本文分享自华为云社区<[Go实现]实践GoF的23种设计模式:单例模式>,作者: 元闰子. 简述 GoF 对单例模式(Singleton)的定义如下: Ensure a class onl ...

最新文章

  1. 各种光学仪器成像技术(上)
  2. 如何对比_潭酒红潭酱酒对比红花郎怎么样口感如何
  3. “中国风”拯救国货彩妆?
  4. SAP JAM活跃度统计
  5. [渝粤教育] 广东-国家-开放大学 21秋期末考试建筑设备10327k1
  6. Spring boot MultipartResolver
  7. 对话MySQL之父:代码一次性完成才是优秀程序员
  8. java8时间类的好处_Java8——时间类
  9. 人工智能专业应不应该读博士?
  10. 漫谈CRM体系化建设2 – 如何开发客户?
  11. java 打印星号_JAVA打印星号
  12. 中央处理器(CPU)
  13. php wget下载图片,如何通过php或wget从Slack下载图像
  14. oracle 行列转换函数
  15. mysql 优化总结
  16. 常见的 PHP IDE 开发工具汇总 (LAMP)
  17. Python爬虫教程:微医挂号网医生数据抓取
  18. Android网络请求归纳 HttpUrlConnection| Vollety|OKHttp3|Retrofit2
  19. 不止会下棋,人工智能还能高考阅卷
  20. 我的 Docker 卡死了,怎么办?在线等

热门文章

  1. stm32存储结构 存储器映射
  2. linux服务器nvidia驱动的安装与卸载
  3. linux命令行如何换行,一行命令太长,看的不清晰,
  4. 手机壳鸿蒙,手机壳黑榜发布 真相太惊人!
  5. php的cookie不存在会是什么值,PHP setcookie() 首次存储不上值
  6. mysql字段说明_mysql 字段类型说明
  7. Linux网络编程---详解TCP
  8. esp32原理图设计_第十一章 ESP32的PWM全彩LED灯显示
  9. 最小径集的算法_如何为数据集选择正确的聚类算法?
  10. MongoDB 里面日期查询的问题