为什么要使用单例

2017-01-15  本文已影响0人  茴香豆的第五种写法

什么是单例:

一个类在整个系统中只有一个实例,而且这个实例在类的内部由private构造的,外部不能直接调用其构造方法,只能获取它的实例.

单例模式的优点:

在内存中只有一个实例对象,节省内存空间.避免重复的创建和销毁对象,可以提高性能,避免对多重资源的重复占用,可以全局进行访问.

单例模式的使用场景:

需要频繁的实例化和销毁的对象.有状态的工具类对象,频繁访问数据库或文件对象.

eg:(静态内部类)

public class SingleInstance{

    private static class InstanceHolder{

           public static final SingleInstance instance=new SingleInstance();

     }

     public static SingleInstance getInstance(){

            return InstanceHolder.instance;

   }

}

eg:(懒汉单列模式)

//懒汉单例模式,在第一次调用时候实例化自己

public class Singleton {

private Singleton() {

}

private static Singleton single = null;

// 静态工厂方法

public static Singleton getInstance() {

if (single == null) {

single = new Singleton();

}

return single;

}

}

加同步锁可以变线程安全的单例

public static synchronized Singleton getInstance(){

if (single == null) {

single = new Singleton();

}

return single;

}

eg:饿汉单例模式

//饿汉式单例类.在类初始化时,已经自行实例化

public class Singleton1 {

private Singleton1() {}

private static final Singleton1 single = new Singleton1();

//静态工厂方法

public static Singleton1 getInstance() {

return single;

}

}

饿汉式在类创建的同时就已经创建好一个静态的对象供系统使用,以后不再改变,所以天生是线程安全的。

外部获取instance实例,而不是new一个对象.

Sgingleton  obj=Singleton.getInstance();

上一篇 下一篇

猜你喜欢

热点阅读