美文网首页
java单例模式

java单例模式

作者: 高巨龙 | 来源:发表于2017-12-02 15:40 被阅读4次

单例模式

一、单例模式:

是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中,应用该模式的类一个类只有一个实例。即一个类只有一个对象实例。这个方法应该是静态方法(类方法),因为让类的实例去生成另一个唯一实例毫无意义。

单例模式有很多种 ,主要分为两种::懒汉式单例、饿汉式单例、

例:饿汉模式

public class Singleton {

//私有的创建一个对象

private static Singleton singleton=new Singleton();

//私有构造器

private Singleton() {

}

//返回Singleton对象方法

public static Singleton getSingleton(){

return singleton;

}//打印输出

public void print(){

System.out.println("对象"+this);

}

}

这种方式基于classloder机制避免了多线程的同步问题,不过,instance在类装载时就实例化,虽然导致类装载的原因有很多种,在单例模式中大多数都是调用getInstance方法,但是也不能确定有其他的方式(或者其他的静态方法)导致类装载,这时候初始化instance显然没有达到lazy loading的效果。

例:懒汉模式(1)

//创建自己本身对象

private static Singleton1 singleton1=null;

//私有化构造器

private Singleton1(){

}

//获得一个Singleton1对象

public Singleton1 geiInttance(){

if(singleton1==null)

{

singleton1=new Singleton1();

}

return singleton1;

}

注意:这种致命的是在多线程不能正常工作。

例:懒汉模式(2)

//创建自己本身对象

private static Singleton1 singleton1=null;

//私有化构造器

private Singleton1(){

}

//获得一个Singleton1对象加锁

publicsynchronizedSingleton1 geiInttance(){

if(singleton1==null)

{

singleton1=new Singleton1();

}

return singleton1;

}

这种写法能够在多线程中很好的工作,而且看起来它也具备很好的lazy loading,但是,遗憾的是,效率很低,99%情况下不需要同步。

相关文章

网友评论

      本文标题:java单例模式

      本文链接:https://www.haomeiwen.com/subject/ymmnbxtx.html