设计模式_单例模式

只包含一个被称为单例类的特殊类。通过单例模式保证系统中,某个类的对象只存在一个。

优点:

1 提供对唯一实例的受控访问。

2 节省内存,系统内存中只存在一个该类的实例。

3 防止产生逻辑错误,比如产生序列号,两个实例可能会产生两个相同序列号。

4 允许可变个数的实例。

缺点:

1 时间开销:每次请求引用检查是否存在类的实例,仍需要时间开销,通过静态初始化解决。

2 开发混淆:开发人员需要记住使单例类不能通过new关键字创建。

3 生存周期:基于内存管理的语言(如Java,.Net),只有单例类能够导致实例被取消分配,因为它包含该实例的私有引用;可手动释放内存的语言(如C++),可以删除对象实例,易出现悬浮引用。

4不易扩展:单例模式没有抽象层,不易扩展。

5负面问题:节省资源,将数据库连接池对象设置为单例类,导致共享连接池对象的程序过多造成连接池溢出。

6对象丢失:实例化的对象长时间不被利用,在基于内存管理的语言中,会被系统回收,从而导致对象状态丢失。

实现:

1 私有,静态,成员变量。

2 私有的构造方法;使实例不能通过new关键字创建。

3 私有的克隆方法;使实例不能被复制或者克隆。

4 静态初始化,getInstance()方法为静态;减少时间开销。

PHP实例

class Singleton{
	private static $_instance = null;	//私有静态变量
	private function __construct(){		//私有构造方法,外部不能通过new获得类的实例
		//..
	}
	private function __clone(){}		//私有克隆方法,不能被复制或者克隆
	public static function getInstance(){	//静态方法获取实例,减少时间消耗
		if(!(self::$_instance instanceof self)){
			self::_instance = new Singleton();
		}
		return self::_instance;
	}
}

1418131414

From ArcticFox

时间: 2024-10-23 18:19:17

设计模式_单例模式的相关文章

大话设计模式_单例模式(Java代码)

单例模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点. 简单描述:构造函数设置为private,以禁止外部类实现本类.本类中提供一个静态方法返回一个本例对象(注意多线程中的实现) 大话设计模式中的截图: 代码例子: Singleton类: 1 package com.longsheng.singleton; 2 3 public class Singleton { 4 5 private static Singleton instance = null; 6 private stati

day06_01_设计模式_单例模式

Singleton Pattern Ensure a class has one instance,and provide a global point of access to it. 确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例. 皇帝只有一个 首先我们来想想,如何获取一个对象,一般是通过new来实现,高级的通过反射,但是该如何禁止外部创建对象. answer : 将构造方法设为私有 优点: 减少内存开支,一个对象需要频繁的创建,销毁时. 避免了子类的多重占用,设置全局的

Java设计模式_单例模式

饿汉单例设计模式 1 /** 2 * 饿汉单例设计模式: 3 * 1. 私有化构造函数. 4 * 2. 声明本类的引用类型变量,并且使用该变量指向本类对象. 5 * 3. 提供一个公共静态的方法获取本类的对象. 6 */ 7 8 //饿汉单例设计模式 ----> 保证Single在在内存中只有一个对象. 9 class Single{ 10 11 //声明本类的引用类型变量,并且使用该变量指向本类对象 12 private static Single s = new Single(); 13 1

【转载】设计模式_单例模式(学习)

一般一个类能否做成单例,最容易区别的地方就在于,这些类,在应用中如果有两个或者两个以上的实例会引起错误,又或者我换句话说,就是这些类,在整个应用中,同一时刻,有且只能有一种状态 三种实现方式: 1.懒汉型 (voltie,同步) 2.饿汉式(no lazy) 3.饿汉式(lazy,内部类)

文成小盆友python-num8 面向对象中的成员,成员修饰符,特殊成员,异常处理,设计模式之单例模式

本节主要内容: 1.面向对象中的成员 2.成员修饰符 3.特殊成员 4.异常处理 5.设计模式之单例模式 一.面向对象中的成员(类的成员) 类的成员总共可以分为3大类,每类中有不同的分支. 1.总述,基本分类 如下图所示: 类成员包括字段,方法,和属性 2.字段 如上图字段分为普通字段和静态字段,两者的使用有区别,但是最大的区别在于两者在内存中的保存位置有区别. 普通字段属于对象而静态字段属于类,在使用过程中谁的字段就由谁来调用. 静态字段和普通字段的定义如下: 在调用时分各自调用 #####类

【GOF23设计模式】单例模式

来源:http://www.bjsxt.com/ 一.[GOF23设计模式]_单例模式.应用场景.饿汉式.懒汉式 1.GOF23设计模式  2.单例模式  3.饿汉式  1 package com.test.singleton; 2 /** 3 * 测试饿汉式单例模式 4 */ 5 public class SingletonDemo01 { 6 7 //类初始化时,立即加载这个对象(没有延时加载的优势).加载类时,天然的是线程安全的! 8 private static SingletonDem

Java设计模式:单例模式

概念: java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主要介绍三种:懒汉式单例.饿汉式单例.登记式单例. 单例模式有以下特点: 1.单例类只能有一个实例. 2.单例类必须自己创建自己的唯一实例. 3.单例类必须给所有其他对象提供这一实例. 单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例.在计算机系统中,线程池.缓存.日志对象.对话框.打印机.显卡的驱动程序对象常被设计成单例.这些应用都或多或少具有资源管理器的功能.每台计算机可以有若干个打印机,但只能

[转]JAVA设计模式之单例模式

原文地址:http://blog.csdn.net/jason0539/article/details/23297037 概念: java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主要介绍三种:懒汉式单例.饿汉式单例.登记式单例. 单例模式有以下特点: 1.单例类只能有一个实例. 2.单例类必须自己创建自己的唯一实例. 3.单例类必须给所有其他对象提供这一实例. 单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例.在计算机系统中,线程池.缓存.日志对象.对话

设计模式 之 单例模式

单例模式思路: 私有化构造方法: 防止实例化 私有化克隆方法: 防止克隆 私有化静态属性: 保存对象 公有化静态方法: 获取对象 代码: <?php //设计模式:单例模式 class Singleton { //私有化静态属性:用于保存对象 private static $obj; //私有化构造方法 private function __construct(){} //公有化静态方法:用于实例化对象 public static function getObj() { //判断对象是否存在 i