学习设计模式之单例模式

单例模式(Singleton Pattern)

其定义为:Ensure a class has only one instance , and provide a global point of access to it.

单例模式的通用类图为:

单例模式的优点:

1、由于单例模式在内存中一个实例,减少了内存开支,特别是对一个对象需要频繁的创建、销毁时,而且创建或者销毁时性能又无法优化,单例模式很适用。

2、由于单例模式只生成一个实例,所以减少了系统开销,当一个对象产生需要比较多的资源时,如读取配置,产生其他的依赖对象时,则可以在启动的时候创建一个单例对象来解决。

3、单例模式可以避免对资源的多重占用,因只有一个实例在内存中。

4、单例模式可以在系统中设置全局的访问点,优化和共享资源访问。

单例模式的缺点:

1、单例模式一般没有接口,扩展很困难。

2、单例模式对测试时不利的,在并行开发环境中,如果单例模式还没有完成,是不能进行测试的。

3、单例模式与单一职责原则有冲突。

单例模式的注意事项:

       在高并发情况下,需要注意单例模式的线程同步问题。如下:

public class Singleton{
        private static Singleton singleton = null;
        private Singleton(){}
        public static Singleton getSingleton(){
                if(singleton == null){
                     singleton = new Singleton();
               }
                return singleton;
}
}

该段代码会出现多个实例:如一个线程A执行到singleton = new Singleton();单还没有获取对象,第二个线程B也执行到singleton == null,那么线程B也将进入if语句中获得一个实例,,这样在内存中就出现了两个实例。解决这个线程不安全的方法可以在方法前加上关键字synchronized,或者在方法中增加synchronized。

时间: 2024-09-26 17:26:11

学习设计模式之单例模式的相关文章

php设计模式之单例模式实例分析

 这篇文章主要介绍了php设计模式之单例模式,实例分析了单例模式的原理与相关使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下     本文实例讲述了php设计模式之单例模式.分享给大家供大家参考.具体分析如下: 单例模式(职责模式): 简单的说,一个对象(在学习设计模式之前,需要比较了解面向对象思想)只负责一个特定的任务: 单例类: 1.构造函数需要标记为private(访问控制:防止外部代码使用new操作符创建对象),单例类不能在其他类中实例化,只能被其自身实例化: 2.拥有一个保存类的实

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

原文:C#设计模式(1)--单例模式 一.引言 最近在设计模式的一些内容,主要的参考书籍是<Head First 设计模式>,同时在学习过程中也查看了很多博客园中关于设计模式的一些文章的,在这里记录下我的一些学习笔记,一是为了帮助我更深入地理解设计模式,二同时可以给一些初学设计模式的朋友一些参考.首先我介绍的是设计模式中比较简单的一个模式--单例模式(因为这里只牵涉到一个类) 二.单例模式的介绍 说到单例模式,大家第一反应应该就是--什么是单例模式?,从"单例"字面意思上理

php设计模式之单例模式代码_php技巧

php设计模式之单例模式的例子,供大家参考,具体内容如下 <?php /** * php设计模式 单例模式 */ class Fruit{ private static $instanceMap = array(); //protected getter for singleton instances protected static function getSingleton($className){ //保证单例模式 并且不能从控制器实例化和克隆 if (!isset(self::$inst

php设计模式之单例模式实例分析_php技巧

本文实例讲述了php设计模式之单例模式.分享给大家供大家参考.具体分析如下: 单例模式(职责模式): 简单的说,一个对象(在学习设计模式之前,需要比较了解面向对象思想)只负责一个特定的任务: 单例类: 1.构造函数需要标记为private(访问控制:防止外部代码使用new操作符创建对象),单例类不能在其他类中实例化,只能被其自身实例化: 2.拥有一个保存类的实例的静态成员变量 3.拥有一个访问这个实例的公共的静态方法(常用getInstance()方法进行实例化单例类,通过instanceof操

深入理解JavaScript系列(25):设计模式之单例模式详解

 这篇文章主要介绍了深入理解JavaScript系列(25):设计模式之单例模式详解,本文给出了多种单例模式的实现方式,需要的朋友可以参考下     介绍 从本章开始,我们会逐步介绍在JavaScript里使用的各种设计模式实现,在这里我不会过多地介绍模式本身的理论,而只会关注实现.OK,正式开始. 在传统开发工程师眼里,单例就是保证一个类只有一个实例,实现的方法一般是先判断实例存在与否,如果存在直接返回,如果不存在就创建了再返回,这就确保了一个类只有一个实例对象.在JavaScript里,单例

java 程序性能优化《第二章》设计优化 2.1善用设计模式 1 单例模式

java 程序性能优化<第二章>设计优化 2.1善用设计模式 1 单例模式 设计模式是前人工作的总结和提炼.通常,被人们广泛流传的设计模式都是对某一特定问题的成熟的解决方案.如果能合理的使用设计模式,不仅能使系统更容易被他人理解,同时也能使系统拥有更加合理的结构.本节总结归纳了一些经典的设计模式,并详细说明它们与软件性能之间的关系. 2.1.1 单例模式 单例模式是设计模式中使用最为普遍的模式之一.它是一种对象创建模式,用于生产一个对象的具体实现,它可以确保系统中一个类只产生一个实例.在Jav

学习设计模式之初,面向对象再理解

要开始大话设计模式的学习了,看这本书的封面,感觉很轻松,很卡通,很有趣.一本新书怎么去读,怎么去学,老师讲过很多次了. 一本书的前言是相当重要,它能帮助我们掌握全局,它也可能会给予我们一些指导.读完前言,我便知道自己下一步该做什么了. 下一个脚步--面向对象再理解. 关于面向对象,在学习C#的时候有了初步总结,但感觉很多概念理解得都不是很深刻.所以,在学习设计模式之初,很有必要再次进行总结. 从设计模式这本书中,故事性.提问性.交谈性的编写方式,读起来的感觉真的不太一样,没有那么枯燥,硬邦邦的感

设计模式之一(单例模式)

原文:设计模式之一(单例模式) 前言 单例模式(Singleton),保证一个类仅有一个实例,并提供一个访问它的全局访问点. 通常我们可以让一个全局变量使得一个对象被访问,但它不能防止你实例化多个对象.一个最好的办法就是,让类自身负责保存它的唯一实例.这个类可以保证没有其他实例可以被创建,并且它可以提供一个访问该实例的方法. 单例模式 public class Singleton { private static Singleton instance; private static readon

【设计模式】—— 单例模式Singleton

模式意图 保证类仅有一个实例,并且可以供应用程序全局使用.为了保证这一点,就需要这个类自己创建自己的对象,并且对外有公开的调用方法. 模式结构 Singleton 单例类,内部包含一个本身的对象.并且构造方法时私有的. 使用场景 当类只有一个实例,而且可以从一个固定的访问点访问它时. 代码结构 [饿汉模式]通过定义Static 变量,在类加载时,静态变量被初始化. 1 package com.xingoo.eagerSingleton; 2 class Singleton{ 3 private