`
ayaoxinchao
  • 浏览: 81010 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
社区版块
存档分类
最新评论

设计模式——单例模式

 
阅读更多

定义

 

       Java中单例模式定义:“一个类有且仅有一个实例,并且自行实例化向整个系统提供。”

 

分析

 

       从定义中可以看出单例的要点有三个:一是某个类只能有一个实例;二是必须自行创建这个实例;三是必须自行向系统提供这个实例。

       实现角度看就是要有以下三点:一是类只提供私有的构造函数(方法);二是类定义中含有一个该类的私有静态对象;三是该类提供了一个共有的函数(方法)用于创建或获取它本身的静态私有对象。

 

动机

 

       1.节约内存

       2.避免当多个实例存在的时候,引起程序逻辑错误

 

实现1_懒汉方式

public class Singleton1 {
	
	private static Singleton1 singleton = null;
	
	private Singleton1() {
		
	}
	
	public static Singleton1 getInstance () {
		if (singleton == null) {
			singleton = new Singleton1();
		}
		return singleton;
	}

}

 

实现2_恶汉方式(线程安全)

public class Singleton2 {
	
	private static Singleton2 singleton = new Singleton2();
	
	private Singleton2() {
		
	}
	
	public static Singleton2 getInstance() {
		return  singleton;
	}

}

实现3_双重锁方式(线程安全)

public class Singleton3 {
	
	private static Singleton3 singleton = null;
	
	private Singleton3() {
		
	}
	
	/**
	 * 这个模式将同步内容下方到if内部,提高了执行的效率,
	 * 不必每次获取对象时都进行同步,只有第一次才同步,创建了以后就没必要了。
	 * @author Perlin
	 * @date 2014-6-30
	 * @return
	 */
	public static Singleton3 getInstance () {
		if (singleton == null) {
			synchronized (Singleton3.class) {
				if (singleton == null) {
					singleton = new Singleton3();
				}
			}
		}
		return singleton;
	}

}

 

2
0
分享到:
评论
4 楼 772EF01 2014-07-01  
cd_huangbo 写道
兄弟,你这些单例除了恶汉能保证单例,其他的都不能,连双重检锁都不能,
关于双重检锁见分析:http://wenku.baidu.com/link?url=lNb6DF8Yuv9HRyXyohsMWChexZYQN7Gdt2jM0RiDZXAhKupBIT6g-1vxn_wkJyjwY9lz1Cohf7nOSD1pN7zpW-o_TymHQ65a_PewiSG3WYy


为什么一定要用双重锁呢


private static Foo _instance = null;
public static Foo getInstance() {
  if(_instance==null) {
     Foo f;
     synchronized(Foo.class) {
        f = _instance;
        if( f == null ) {
             f = new Foo();
        }
        _instance = f;
     }
  }
  return _instance;
}
这样是不是也可以保证单例实现
3 楼 java_web_hack1 2014-07-01  
还有一种内部类的方式,撸主可以去研究一下
2 楼 高军威 2014-07-01  
cd_huangbo 写道
兄弟,你这些单例除了恶汉能保证单例,其他的都不能,连双重检锁都不能,
关于双重检锁见分析:http://wenku.baidu.com/link?url=lNb6DF8Yuv9HRyXyohsMWChexZYQN7Gdt2jM0RiDZXAhKupBIT6g-1vxn_wkJyjwY9lz1Cohf7nOSD1pN7zpW-o_TymHQ65a_PewiSG3WYy

高大上  惊出我一身冷汗啊
1 楼 cd_huangbo 2014-07-01  
兄弟,你这些单例除了恶汉能保证单例,其他的都不能,连双重检锁都不能,
关于双重检锁见分析:http://wenku.baidu.com/link?url=lNb6DF8Yuv9HRyXyohsMWChexZYQN7Gdt2jM0RiDZXAhKupBIT6g-1vxn_wkJyjwY9lz1Cohf7nOSD1pN7zpW-o_TymHQ65a_PewiSG3WYy

相关推荐

    设计模式——单例模式(懒汉模式)

    单例模式是软件设计模式中的一种经典模式,它保证了类在任何情况下都只有一个实例存在。这个模式在很多场景下非常有用,例如控制全局资源、管理配置信息等。本文将详细探讨单例模式的懒汉式实现,并结合源码进行解析...

    设计模式——单例

    设计模式是软件工程中的一种最佳实践,用于解决在不同场景下重复出现的问题。...通过阅读提供的"iOS 设计模式——单例"相关资料,可以深入理解在iOS开发环境中如何有效利用单例模式来优化代码结构和提高程序性能。

    C++设计模式——单例模式-附件资源

    C++设计模式——单例模式-附件资源

    设计模式——单例实现

    单例的5中实现及反射和反序列化破解单例。

    java设计模式——单例模式

    【Java设计模式——单例模式】 单例模式是一种常见的软件设计模式,它的核心思想是确保在应用程序的整个生命周期中,某个类只有一个实例存在。这种模式主要用于控制类的实例化过程,减少系统资源的消耗,提高系统...

    设计模式实现——单例模式

    单例模式是软件设计模式中的一种,它的主要目的是确保一个类只有一个实例,并提供一个全局访问点。这种模式在很多场景下都非常有用,比如控制共享资源、管理系统级别的服务或者简化对象间的交互。单例模式的核心在于...

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

    本次将聚焦于一种较为简单的模式——单例模式。 #### 单例模式概述 单例模式是一种创建型模式,它的核心在于确保某个类只有一个实例,并提供一个全局可访问的访问点。这种模式非常实用,尤其是在需要频繁地创建和...

    java设计模式之——单例模式

    单例模式是软件设计模式中的一种经典模式,其主要目的是控制类的实例化过程,确保在任何情况下,一个类只有一个实例存在。这种模式通常用于管理共享资源或者全局配置,例如数据库连接池、线程池、日志服务等。在Java...

    C++中的三大设计模式:单例模式、工厂模式与观察者模式的代码实现

    内容概要:本文档介绍了三个经典的软件设计模式——单例模式(Singleton Pattern)、工厂模式(Factory Pattern)以及观察者模式(Observer Pattern)的具体实现,并给出了带有详细注释的C++代码范例。对每个设计模式都有...

    设计模式之单例模式Java实现和类设计图

    本次我们将深入探讨两种设计模式——单例模式和装饰模式,它们在Java编程中都有着广泛的应用。 首先,让我们来理解“单例模式”。单例模式是一种创建型设计模式,其核心思想是保证一个类只有一个实例,并提供一个...

    设计模式-单例模式

    **设计模式——单例模式** 单例模式是一种广泛应用于软件设计中的创建型设计模式,它的核心思想是确保一个类只有一个实例,并提供一个全局访问点。这样做的好处在于控制共享资源的访问,比如线程安全的数据库连接池...

    设计模式之PHP项目应用——单例模式设计Memcache和Redis操作类源码

    1)程序功能:单例模式设计Memcache和Redis操作类,采用PHP编写。 2)程序详解地址:http://blog.csdn.net/clevercode/article/details/46410055。 3)原创作品,出自"CleverCode的博客",分类为《设计模式之PHP项目...

    设计模式——策略模式 & 单例模式

    策略模式和单例模式是软件设计中两种非常重要的设计模式,它们在实际开发中有着广泛的应用。在这篇文章中,我们将深入探讨这两种模式的核心概念、实现方式以及如何在实际项目中运用。 策略模式是一种行为设计模式,...

    java设计模式-单例.pdf

    ### Java设计模式——单例模式详解 #### 一、单例模式概述 单例模式是设计模式中的一个重要组成部分,属于创建型模式之一。其主要作用是确保某个类仅有一个实例存在,并提供一个全局访问该实例的方法。这在很多场景...

    IOS应用源码——单例模式.zip

    单例模式是软件设计模式中的一种,它保证一个类只有一个实例,并提供一个全局访问点。在iOS应用开发中,单例模式被广泛用于管理共享资源、实现全局设置、提供网络请求管理器等场景。让我们深入探讨一下单例模式在iOS...

    android开发设计模式之——单例模式详解

    单例模式是设计模式中最常见也最简单的一种设计模式,保证了在程序中只有一个实例存在并且能全局的访问到。比如在Android实际APP 开发中用到的 账号信息对象管理, 数据库对象(SQLiteOpenHelper)等都会用到单例...

Global site tag (gtag.js) - Google Analytics