單例模式

转载 2012年03月21日 11:10:48
 

 一、什么是单例模式:
单例模式确保某一个类只有一个实例,而且向这个系统提供这个实例。
二、单例模式的要点:
    1、某个类只能有一个实例
    2、它必须自行创建这个实例
    3、必须自行向这个系统提供这个实例
三、单例模式的结构及实现:
1、饿汉式单例类:
类图:

代码:
public class EagerSingleton
{
private static final EagerSingleton m_instance = new EagerSingleton();
private EagerSingleton()
{
}
public static EagerSingleton getInstance()
{
return m_instance;
}
}
当类被加载的时候,static 类型的m_instance就会被實例化,保证的單例模式的自动创建条件,他是常量,保证了值不变,即保证了对象的唯一;事例的创建调用了私有的构造方法,构造方法私有保证了外界不能直接调用。
2、懒汉式单利类:
类图:
代码:
public class LazySingleton
{
private static LazySingleton m_instance = null;
private LazySingleton()
{
}
synchronized public static LazySingleton getInstance()
{
if(m_instance == null)
{
m_instance = new LazySingleton();
}
return m_instance;
}
}
3、注册式单例类
类图
代码
import java.util.HashMap;
public class RegSingleton
{
static private HashMap m_registy = new HashMap();

static
{
RegSingleton sl = new RegSingleton();

m_registy.put(sl.getClass().getName , x);
}

protected RegSingleton()
{

}

public static RegSingleton getInstance(String name)
{
if(name==null)
{
name = "easyworld.pattern.RegSingleton";
}
}
if(m_registy.get(name)==null)
{
try
{
m_registy.put(name,Class.forName(name).newInstance());
}
catch (Exception e)
{
System.out.println("Erorr");
}
}
return (RegSingleton)(m_registry.get(name));

}

 

在多线程环境下使用单例模式时,要考虑到加锁,要保证一个线程进入代码的临界区时,另一个线程不进入临界区。也可以使用双重锁定的方式,先判断该实例是否为null,如果为null,则加锁后再次判断是否为null,如果为null,则创建实例。同时,也可以采用将该实例声明为静态成员,也可以解决线程安全的问题。

關於單例模式的理解

最近面了好多家公司,幾乎都會問到有關單例模式的問題,當然基礎的單例模式大家可能都寫得出來,但面試官深入問下去呢?很可能就矇了,所以在這裡就整理幾個單例模式防止自己忘記。 單例模式是做什麼的? 根據...
  • aspspspsp
  • aspspspsp
  • 2017年08月09日 16:14
  • 32

c#之lock和单例模式

using System.Collections; using System.Collections.Generic; using UnityEngine; using System.Threadin...
  • Fenglele_Fans
  • Fenglele_Fans
  • 2018年01月18日 14:18
  • 25

【趣解】单例模式之懒汉式、恶汉式

单例模式很好理解,就比如一夫一妻制,当老公叫老婆的时候,肯定是指那个唯一的女生(特殊情况例外....)。...
  • a445849497
  • a445849497
  • 2017年02月26日 21:17
  • 469

C# lock的理解 ,注意看注释

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T...
  • lovetaosha
  • lovetaosha
  • 2015年03月09日 10:30
  • 859

03-05单例模式_方法调用

经典编程练习
  • u012897654
  • u012897654
  • 2014年05月02日 23:36
  • 1056

單例模式(懶漢式,餓漢式)

1,单例设计模式。 解决的问题:就是可以保证一个类在内存中的对象唯一性。 必须对于多个程序使用同一个配置信息对象时,就需要保证该对象的唯一性。 如何保证对象唯一性呢? 1,不允许其他程序用new创建...
  • zerohsz
  • zerohsz
  • 2017年06月16日 10:31
  • 124

JAVA線程安全的單例模式

單例模式
  • yu2di13
  • yu2di13
  • 2011年08月08日 10:10
  • 88

单例模式-多线程单例模式

using System; using System.Threading; namespace Rattan.ERP.TMS.Services.EOP {   ///   /// ...
  • xxj_jing
  • xxj_jing
  • 2014年03月25日 09:43
  • 2675

linux---單用戶模式

1.grub啟動項   進入啟動畫面后,敲入“e",將光標移動到kernel....那一行,再敲入”空格+single”,回車,敲入“b“,啟動系統,即進入單用戶模式(這裡的修改只影響本次啟動,不會修...
  • hanner_cheung
  • hanner_cheung
  • 2010年11月12日 15:17
  • 687

OM裡保留記錄備份SQL

 First:create table gobo.gobo_om_reservations_2008b asselect * from gobo_om_reservationswhere to_cha...
  • suntyq
  • suntyq
  • 2009年11月23日 23:35
  • 766
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:單例模式
举报原因:
原因补充:

(最多只允许输入30个字)