设计模式

来源:互联网 发布:淘宝上种草是什么意思 编辑:程序博客网 时间:2024/06/01 10:48

单例模式

常用的软件设计模式;
在它的核心结构中只包含一个被称为单例类的特殊类;通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问;从而方便对实例个数的控制并节约系统资源;
 单例模式有以下特点:
  1、单例类只能有一个实例。
  2、单例类必须自己创建自己的唯一实例。
  3、单例类必须给所有其他对象提供这一实例

懒汉式

//懒汉式单例化,在第一次调用的时候实例化自己public class Singleton {    private Singleton(){}//私有构造,保证外部不可实例化;    private static Singleton single = null;//静态的本类对象的属性,一个类只有一份    //静态工厂方法      public static Singleton getInstance(){        if(single == null){            single = new Singleton();        }        return single;//调用的时候返回一个    }}

饿汉式

//饿汉模式;public class Singleton1 {    private Singleton1(){}    private static final Singleton1 single = new Singleton1();    //静态工厂方法    public static Singleton1 getInstance(){        return single;    }}

线程安全

  • 饿汉式本身就是线程安全的,可以直接用于多线程而不会出现问题;
  • 懒汉式是非线程安全的,并不保证一定单例.
    解决方式如下:synchronized:当它锁定一个方法或者一个代码块的时候,同一时刻最大只有一个线程执行这段代码;
//使用双重检测机制实现线程安全的懒汉式;//比较完整的懒汉机制public class Singleton2 {    public static volatile Singleton2 instance = null;    private Singleton2(){}    public static Singleton2 getInstance(){        if(instance == null){            synchronized (Singleton2.class) {                if (instance == null) {                    instance = new Singleton2();                }            }        }        return instance;    }}

目前的最好的方法是:使用静态内部类实现线程安全的单例模式;

//使用静态内部类实现线程安全的单例模式public class Mysingleton {//内部类    public static class MySingletonHandle{        private static Mysingleton instance = new Mysingleton();    }    private Mysingleton(){}    public static Mysingleton getInstance(){        return MySingletonHandle.instance;    }}