设计模式之创建型模式—— 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‘;

?>
时间: 2024-11-18 13:46:04

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

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

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

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

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

设计模式 (创建型模式)

  设计模式 创建型模式 1.创建型模式         创建型模式,包括了5种设计模式,分别是 Singleton (单例模式),Factory(工厂模式),AbstractFactory(抽象工厂模式),Builder(创建者),Prototype(原型) ,创建型模式主要作用就是抽象了实例化过程.他们帮助一个系统独立于如何创建.组合和表示他的那些对象.一个类创建型模式使用继承改变被实例化的类.而一个对象创建型模式将实例化委托给另一个对象. 2.Singleton (单例模式)      单

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

单例模式 懒汉式,线程不安全. 除非是单线程程序,否则不推荐使用. public class Singleton { private static Singleton instance; private Singleton (){} public static Singleton getInstance() { if (instance == null) { instance = new Singleton(); } return instance; } } 饿汉式,线程安全 当程序总是使用这个

设计模式之创建型模式

一.前言 设计模式应该是在软件工程的背景下进行讨论的,而不是为了设计模式而论设计模式.设计模式是软件工程面向对象设计工作中一个抽象.归纳.总结的过程.软件设计的最高目标和最高准则就是易扩展,易复用,易维护, 灵活性高,高可用,稳定性高一切的设计原则和设计模式最终的目标都是向这个目标靠拢的. 二.面向对象设计六大原则 任何的设计模式都是基于面向对象的特性(抽象.封装.继承.多态)和设计原则进行设计和实现的,是面向对象设计原则的在不同场景下的实现方案. 抽象:抽离变化的部分,引入抽象层,实现具体实现

Java设计模式之创建型模式

创建型模式分为五类:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式 一.工厂方法模式:接口-实现类-工厂类 工厂类的目的是为了产生Sender对象,通过不同的参数传入产生不同的对象. 将工厂类中的工厂方法改为多个工厂方法即为多个工厂方法的设计模式 将工厂类中的工场方法改为static即为静态工厂方法设计模式 二.抽象工厂方法模式:接口-实现类-工厂类 特点是: 工厂类实现某个接口,利于以后扩展,比如可以增加BlueTooth的工厂类. 工厂设计模式是抽象工厂设计模式的一个特例. 三.

设计模式1—创建型模式

模式 在一定环境中解决某一问题的方案,包括三个基本元素--问题,解决方案和环境. 大白话:在一定环境下,用固定套路解决问题. 设计模式(Design pattern) 是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式于己于他人于系统都是多赢的:设计模式使代码编制真正工程化:设计模式是软件工程的基石脉络,如同大厦的结构一样. 设计模式的分类(Gang of Four的"DesignPatt

设计模式之“创建型模式”

创建型模式主要分为五大模式,分别为:抽象工厂模式.建造者模式.工厂方法模式.原型模式.单例模式. 抽象工厂模式 提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. 一.优点 1.易于交换产品系列. 2.它让具体的创建实例过程与客户端分离. 二.反射 Assembly.Load("程序集名称").CreateInstance("命名空间.类名称")需要在程序顶端写上using System.Reflection;来引用Reflection所有用简单工

设计模式_创建型模式_简单工厂模式

转载自:http://blog.csdn.net/lovelion  作者:刘伟 简单工厂模式并不属于GoF 23个经典设计模式,但通常将它作为学习其他工厂模式的基础,它的设计思想很简单,其基本流程如下:        首先将需要创建的各种不同对象(例如各种不同的Chart对象)的相关代码封装到不同的类中,这些类称为具体产品类, 而将它们公共的代码进行抽象和提取后封装在一个抽象产品类中,每一个具体产品类都是抽象产品类的子类: 然后提供一个工厂类用于创建各种产品,在工厂类中提供一个创建产品的工厂方