设计模式之创建型模式—— 1.4 单例模式

<?php

	/**
	 * 1.4 单例模式
	 * 	解决的问题:
	 *  	如何确保一个特殊类的实例是独一无二的
	 *  	,也就是说这个实例是它所属类的唯一一
	 *  	个实例对象,并且很容易的对它进行存取?
	 *  解决的方案:
	 *  	保证一个类仅有一个实例,并提供一个访
	 *  	问它的全局访问点。
	 *  该模式包含一种角色:
	 *  	1. 单例角色
	 *  优点:
	 *  	1. 始终保持唯一的一个实例。
	 *  	2. 可对此唯一实例进行访问控制。
	 *  缺点:
	 *  	1. 虽然实例数量很少,但每次请求引用时
	 *  	   都要检查是否存在类的实例,所以仍然
	 *  	   存在一些开销。可以通过使用静态初始
	 *  	   化解决此问题。
	 *  	2. 因为不能实例化,所以开发人员必须记
	 *  	   住某个类不能使用new关键字产生对象。
	 *  
	 *  使用场景:
	 *  	1. 当类只能有一个实例而且客户可以从一
	 *  	   个众所周知的访问点访问它时。
	 *  	2. 当这个唯一实例应该是通过子类化可扩展
	 *  	   的,并且客户应该无需改代码就能使用一
	 *  	   个扩展的实例时。
	 */

	/**
	 * 单例角色,三要素:
	 * 		1. 必须有一个静态成员变量保存实例;
	 * 		2. 只提供私有的构造函数;
	 * 		3. 必须有一个静态函数用于创建获取
	 * 		   静态成员变量。
	 * 		4. 私有化克隆函数
	 */
	class DB{
		private $con;
		protected static $db;
		private function __construct(){
			$this->con=new mysqli(‘localhost‘,‘root‘,‘123456‘,‘test‘);
			echo ‘建立一次数据库连接‘;
		}

		public static function getInstance(){
			if(! self::$db instanceof self){
				self::$db=new self();
			}
			return self::$db;
		}

		private function __clone(){}
	}

	//客户端
	$db=DB::getInstance();
	$db2=DB::getInstance();
	// $db3=clone $db;
	echo $db===$db2 ? ‘OK‘:‘NO‘;

?>
时间: 02-15

设计模式之创建型模式—— 1.4 单例模式的相关文章

设计模式(四) : 创建型模式--单例模式

单例模式的话,类图上来看是最简单的设计模式,就是一个类只能有一个自己的实例. 单例模式通常来说我们就有Lazy loading的和不是Lazy loading的.<java与模式>里面的关于这两种的类图,: 可以看到一个是现开始就实例话的,这样的话不符合我们的lazy loading,还有一种是在getinstance方法里头去new的,这样的话会有线程安全的问题,我们提供了双重检查锁. 下面看示意代碼︰ 1. 静态初始化: package com.javadesignpattern.Sing

设计模式之创建型模式(上)

没有总结的学习不算学习,这一个月的学习可谓收获多多啊,接下来与大家分享一下. 一.设计模式的分类 总体来说设计模式分为三大类: 1.创建型模式,共五种. 2.结构型模式,共七种. 3.行为型模式,共十一种. 首先研究创建型模式 二. 概述 创建型模式,就是用来创建对象的模式,抽象了实例化的过程.它帮助一个系统独 立于如何创建.组合和表示它的那些对象. 三. 为什么需要创建型模式 所有的创建型模式都有两个永恒的主旋律: 第一,它们都将系统使用哪些具体类的信息封装起来: 第二,它们隐藏了这些类的实例

【设计模式】创建型模式之抽象工厂Abstract Factory

抽象工厂Abstract Factory是一种创建型设计模式,目的在于提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类.抽象工厂的类图如下,客户仅与抽象类定义的定义的接口交互,而不使用特定的具体类的接口.一个系统包含多种产品时,AbstractFactory声明创建各种抽象产品对象的操作接口,这些接口是直接暴露给Client的,而具体产品对象的创建则延迟到子类ConcreteFactory,Client面对的产品类是AbstractProduct,无需关系具体产品类是什么.在运

设计模式之创建型模式—— 1.5 原型模式

<?php /**  * 1.5 原型模式  *  解决的问题:  *  某些结构复杂的对象的创建工作,由于需  *  求的变化,这些对象经常面临着剧烈的变  *  化,但是它们却有用比较稳定一种的接口.  *  解决的方案:  *   用原型实例指定创建对象的种类,并且通  *   过拷贝这些原型创建新的对象.  *  该模式无需任何角色:  *   因为在PHP中,在每个声明的类中已经默认  *   包含了克隆函数,所以无需单独在建立一个  *   抽象类来实现克隆操作了.  *  优点:

设计模式之创建型模式—— 1.1 简单工厂模式

<?php                  /** * 1.1 简单工厂模式 * * 解决的问题: *  如何解决多个类实例化对象的问题. *  注意:因为是简单工厂模式,所以要实例 *    化的类不能太多,否则请使用1.2节 *    的工厂方法模式. * * 解决方案: *  建立一个工厂(即一个工厂类),通过参数的 *  传递动态决定应该创建哪一个产品类(这些 *  产品类继承自一个父类或接口)的实例. *  *  * 该模式中包含三种角色: *  注:这里的角色指的就是类! *  1

设计模式之创建型模式—— 1.2 工厂方法模式

<?php /**  * 1.2 工厂方法模式  * 解决的问题:  *  如何解决多个类实例化对象的问题.  *   * 解决的方案:  *  定义一个用于创建对象的接口,让子类决定  *  实例化哪一个类.工厂方法使一个类的实例  *  化延迟到其子类.  *   * 该模式包含四种角色:  *  1. 抽象产品角色(一个)  *  职责:它是具体工厂角色所创建的对象  *    的父类.负责描述所有实例所共  *    有的公共接口.  *  2. 具体产品角色  *  职责:它是具体工厂

设计模式之创建型模式—— 1.3 抽象工厂模式

<?php /**  * 1.3 抽象工厂模式  * 解决的问题:  *  如何解决多个类实例化对象的问题.  * 解决的方案:  *  提供一个创建一系列相关或相互依赖对象的  *    接口,而无需指定它们具体的类.  * 该模式包含四种角色:  *  1. 抽象产品角色(两个或多个)  *  职责:同工厂方法模式  *    2. 具体产品角色  *    职责:同工厂方法模式  *      3. 抽象工厂角色  *    职责:同工厂方法模式  *      4. 具体工厂角色  * 

设计模式之创建型模式—— 1.6 建造者模式

<?php /**  * 1.6 建造者模式  * 定义:  *  将一个复杂对象的构建与它的表示分离  *  ,使得同样的构建过程可以创建不同的  *  表示.  * 此模式包含三种角色:  *  1. 抽象建造者角色  *  职责:  *  用于指定规则和流程  *  2. 具体建造者角色  *  职责:  *  具体的建造过程  *  3. 指挥者角色  *  职责:  *  用于指挥建造过程  *      4. 具体产品角色  *  * 优点:  *  1. 封装性  *  2. 建造

设计模式---创建型模式

一.概况 总体来说设计模式分为三大类: (1)创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. (2)结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组合模式.享元模式. (3)行为型模式,共十一种:策略模式.模板方法模式.观察者模式.迭代子模式.责任链模式.命令模式.备忘录模式.状态模式.访问者模式.中介者模式.解释器模式. 二.设计模式的六大原则 1.开闭原则(Open Close Principle) 开闭原则就是说对扩展开放,对修