/**

* php设计模式 单例模式

*/

class Fruit{

private static $instanceMap = array();

//protected getter for singleton instances

protected static function getSingleton($className){

//保证单例模式 并且不能从控制器实例化和克隆

if (!isset(self::$instanceMap[$className])) {

$object = new $className;

//Make sure this object inherit from Singleton

if ($object instanceof Fruit) {

self::$instanceMap[$className] = $object;

var_dump($object);

} else {

throw SingletonException("Class '$className' do not inherit from Singleton!");

}

}

return self::$instanceMap[$className];

}

//protected constructor to prevent outside instantiation

protected function __construct(){}

//denie cloning of singleton objects

public final function __clone(){

trigger_error('It is impossible to clone singleton', E_USER_ERROR);

}

}

class Apple extends Fruit{

protected $rndId;

public function __construct(){

$this->rndId = rand();

}

public function whatAmI(){

echo 'I am a Apple(' . $this->rndId . ')
';

}

public static function getInstance(){

//echo get_class();

return Fruit::getSingleton(get_class());

}

}

class GreenApple extends Apple{

public function whatAmI(){

echo 'I am a GreenApple(' . $this->rndId . ')
';

}

public static function getInstance(){

return Fruit::getSingleton(get_class());

}

}

$apple1 = Apple::getInstance();

//var_dump($apple1);

$apple2 = GreenApple::getInstance();

$apple1->whatAmI();// should echo 'I am a Apple(some number)

$apple2->whatAmI();// should echo 'I am a GreenApple(some number)

$apple1 = Apple::getInstance();

$apple2 = GreenApple::getInstance();

//保证单例模式

$apple1->whatAmI();// should echo 'I am a Apple(same number as above)

$apple2->whatAmI();// should echo 'I am a GreenApple(same number as above)

// $a = clone $apple1;// this should fail

// $b = clone $apple2;// this should fail

php单例模式代码,php设计模式之单例模式代码相关推荐

  1. java单例模式实例_Java设计模式之单例模式 通俗易懂 超详细 【内含案例】

    单例模式 什么是单例模式 ? 确保程序中一个类只能被实例化一次,实现这种功能就叫单例模式 单例模式的好处是什么 ? 方便控制对象 节省资源减少浪费 怎么实现单例模式 ? 构造私有化 调用静态方法返回实 ...

  2. php 单例模式 序列化,php设计模式(二)单例模式

    应用场景: 数据库连接这种比较耗费资源的操作: 我们希望整个应用只实例化一个: 结构: 4私1公: 私有化构造方法: 防止使用 new 创建多个实例: 私有化克隆方法: 防止 clone 多个实例: ...

  3. 代码规范+设计模式落地之路

    欢迎关注方志朋的博客,回复"666"获面试宝典 | 前言 刚刚与同事开了一个分享会,笔者分享了一些了代码设计模式相关的内容. 以及复盘了一下项目中有些复杂的业务场景,为什么没有很好 ...

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

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

  5. 设计模式(一) 单例模式

    2019独角兽企业重金招聘Python工程师标准>>> Hello 设计学习应用,好记性不如烂笔头,强调不是学习和小试牛刀,通过几遍文章资料,通过几段固定的代码就可以把设计模式的思想 ...

  6. iOS设计模式(02):单例模式

    分享到:QQ空间新浪微博腾讯微博微信 单例模式是一个类在系统中只有一个实例对象.通过全局的一个入口点对这个实例对象进行访问.在iOS开发中,单例模式是非常有用的一种设计模式.如下图,是一个简单的例模式 ...

  7. java23种设计模式+单例_Java23种设计模式之单例模式

    一.单例模式简介 单例模式是Java设计模式中常见的一种模式.主要分为懒汉式单例.饿汉式单例.登记式单例: 单例模式的特点:  1.单例类只能有一个实例:  2.单例类必须自己创建自己的唯一的实例: ...

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

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

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

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

最新文章

  1. NIO详解(七):进程间通信(MappedByteBuffer)
  2. Rails测试《十一》添加邮件发送程序及测试邮件发送程序
  3. win7安装matlab的问题,安装matlab7.0出现问题,我是win7+64位系统,求解
  4. 2.7万字还原行业面貌,《2019 AI金融风控行业研究报告》正式上线!...
  5. [js] js中的undefined和 ReferenceError: xxx is not defined 有什么区别?
  6. 初窥Linux 之 我最常用的20条命令
  7. python爬虫课程设计摘要_爬虫课程设计(爬虫代码)
  8. 您的设备不支持googleplay服务_google play下载-google play下载安卓
  9. 对方差,协方差,相关系数,协方差矩阵的理解与比较
  10. 阶段1 语言基础+高级_1-3-Java语言高级_08-JDK8新特性_第3节 两种获取Stream流的方式_1_两种获取Stream流的方式...
  11. 四纵四横客运专线(高铁)
  12. 软件开发人员培养计划
  13. php apache mpm,RHEL 7 Apache MPM 配置
  14. java pointer_Java EE 8 JSON Pointer讲解
  15. 因为有太多的无奈,我选择了逞强
  16. Excel Sheet页相关操作(21.10现代设计体验)
  17. 红旗linux如何开远程桌面,红旗Linux开启_ftp_telnet_远程桌面
  18. 华人新移民在美国哪里定居最适合?第一名居然是....
  19. 点燃你温暖我 爱心 源码
  20. 使用VGG-19模型训练自己的数据集

热门文章

  1. 【重点】剑指offer——面试题25:二叉树中和为某一值的路径
  2. 利用级数求和推导泊松分布的期望方差
  3. 计算机系统内部五大部件的主要连接关系总结
  4. 栈--进栈,出栈指针修改的顺序问题
  5. matlab2016一条命令设置坐标轴标签旋转角度、字体大小和字体!
  6. Javascript:一些基本语法
  7. MySQL 开发实践
  8. Java WEB之过滤器
  9. Linux 操作memcache命令行
  10. vue权限问题解决方案