java设计模式--两种单例模式实现

转载 2015年11月17日 23:02:40

单例模式有以下三个特点:
一、单例类在整个系统中只能有一个实例
二、单例类必须自己创建自己的实例
三、单例类必须系统中其他对象提供这个实例

单例模式的好处就是:类只实例化一次,省资源,节省开销,提高速度

第一种:饿汉式,在类被加载时,静态变量m_instance会被初始化,此时类的私有构造子会被调用。


SingletonOne .java

package designpattern.singleton;

public class SingletonOne {
//Create instance when the class load.
private static final SingletonOne m_instance = new SingletonOne();

//此处写成私有方法可以防止用户在外面用new方法来产生。
private SingletonOne(){}

public synchronized static SingletonOne getInstance(){
   return m_instance;
}
}

第二种:懒汉式,在下面给出懒汉式单例类实现里对静态工厂方法使用了同步化,以处理多线程环境

SingletonTwo.java

package designpattern.singleton;

public class SingletonTwo {
private static SingletonTwo m_getInstance = null;


//此处写成私有方法可以防止用户在外面用new方法来产生。
private SingletonTwo(){
  
}

//synchronized可以保证线程安全
public synchronized static SingletonTwo getInstance(){
   //When invoke the instance then create instance.
   if (m_getInstance == null){
    m_getInstance = new SingletonTwo();
   }
   return m_getInstance;
}
}

补充什么是线程安全?

如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的。

相关文章推荐

设计模式(01) 单例模式(创建类模式)(上,两种推荐的实现方法)

From Now On,Let us begin Design Patterns。单例模式 定义 确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。 Ensure a classha...

java设计模式之单例模式详解

  • 2012年11月02日 17:53
  • 33KB
  • 下载

设计模式--单例模式java例子

  • 2017年02月07日 11:58
  • 9KB
  • 下载

Java实现设计模式之单例模式

单例模式(Singleton)保证一个类仅有一个实例,并提供一个访问它的全局访问点...

java 设计模式 单例模式

  • 2012年03月16日 22:45
  • 2KB
  • 下载

JAVA设计模式中的单例模式

  • 2009年02月24日 16:51
  • 3KB
  • 下载

设计模式(一):单例模式 java实现

参考:http://blog.csdn.net/jason0539/article/details/23297037/单例模式:指的是一个类只有一个实例对象。它的设计是为了实现类的单一功能。专注于自己...

设计模式之—单例模式(Singleton)-Java实现

单例模式限制了使用这个模式的类只能生成一个对象。有一些对象其实我们完全只需要一个即可,如:线程池(threadpool)、缓存(cache)、注册表(registry)的对象、设备的驱动程序的对象等等...

设计模式之单例模式java语言的实现

设计模式之单例模式的实现,编程语言是使用的java

【JAVA】设计模式之懒汉式与恶汉式的单例模式实现的方法与详解

作者:程序员小冰,GitHub主页:https://github.com/QQ986945193 新浪微博:http://weibo.com/mcxiaobing长期维护的Android项目,里面...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java设计模式--两种单例模式实现
举报原因:
原因补充:

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