标签:
引自百度百科:
单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例类的特殊类。
通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。
如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案。
单例模式其实算一个比较容易理解的设计模式了,让我们来查看一个比较有名的定义:
单例模式最初的定义出现于《设计模式》(艾迪生维斯理, 1994):“保证一个类仅有一个实例,并提供一个访问它的全局访问点。”
根据这个定义,我们知道实现单例模式有两个要求,我们可以把它们理解成:一个符合单例模式的类仅能实例化一个不变的对象,也就是说,对这个类的多次实例化得到的是同一个对象;这个类可以在全局范围内被实例化。我们暂且不管它的实现,我们首先考虑的是,这么做有什么意义呢?意义就是,它可以确保唯一性,并且在一定程度上可以起到节约资源的作用。举例来说,我们用同一个QQ账号在同一台计算机上登录是失败的,因为你不需要两个完全一样的聊天工具,它们界面相同,接收的消息相同,这是重复的,是没有意义的。而且这样做还浪费了系统资源。所以,这就是单例模式存在的意义。
那么单例模式应该怎样实现呢?总的来说有以下三种实现方案:
懒汉式:
1 // 1、懒汉式 2 3 public class SingletonPattern { 4 5 // 声明一个私有静态的实例引用 6 private static SingletonPattern singletonPattern = null; 7 8 // 把无参构造方法设置为私有,防止外部类通过构造方法创建实例 9 private SingletonPattern() { 10 } 11 12 public static SingletonPattern getSingletonPattern() { 13 if (singletonPattern == null) { 14 singletonPattern = new SingletonPattern(); 15 } 16 return singletonPattern; 17 } 18 }
饿汉式:
1 // 2、饿汉式 2 3 public class Test { 4 5 // 在内部类中实现单例模式 6 public static class SingletonPattern { 7 8 private static final SingletonPattern singletonPattern = new SingletonPattern(); 9 10 // 同样是私有的构造方法 11 private SingletonPattern() { 12 } 13 14 public static SingletonPattern getSingletonPattern() { 15 return singletonPattern; 16 } 17 } 18 }
双重锁式:
1 // 3、双重锁式 2 3 public class Test { 4 5 // 在内部类中实现单例模式 6 public static class SingletonPattern { 7 8 private static SingletonPattern singletonPattern = null; 9 10 // 设置私有的构造方法 11 private SingletonPattern() { 12 } 13 14 public static SingletonPattern getSingletonPattern() { 15 if (singletonPattern == null) { 16 // 保证线程同步 17 synchronized (SingletonPattern.class) { 18 if (singletonPattern == null) { 19 singletonPattern = new SingletonPattern(); 20 } 21 } 22 } 23 return singletonPattern; 24 } 25 } 26 }
以上三种形式,有的是线程安全的,有的是线程不安全的。有的通过外部类实现,有的通过内部类实现。总之,具体使用情况还得具体分析。
本文有分析得不到位甚至是错误的地方,还请大家指正!
本文引用出处:单例模式_百度百科词条创建者:20071522110标签:
原文地址:http://www.cnblogs.com/msdnvip/p/4762938.html