大话Java单例设计模式

来源:互联网 发布:linux建站教程 编辑:程序博客网 时间:2024/05/23 01:11
单例模式无疑是23种设计模式中最简单的一个,在实际开发项目开发中也比较常用。如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案。


笔者总结单例模式的三要素:
①、私有的静态本类对象(防止外部类调用此单例对象)

②、私有的构造方法(防止通过new来创建单例对象)

③、返回该类对象的共有的静态工厂方法(可以通过“类名.getInstance()”方法得到单例对象)


其中其中单例模式又分为懒汉、饿汉两种模式

class Singletion {// ①、私有的静态本类对象private static Singletion singletion;// ②、私有的构造方法private Singletion() {}// ③、返回该类对象的共有的静态工厂方法public static Singletion getInstance() {if (singletion == null) {singletion = new Singletion();}return singletion;}}



饿汉模式是指在调用静态工厂方法时创建对象

class Singletion {// ①、私有的静态本类对象private static Singletion singletion = new Singletion();// ②、私有的构造方法private Singletion() {}// ③、返回该类对象的共有的静态工厂方法public static Singletion getInstance() {return singletion;}}




懒汉与饿汉模式各有其优势:
懒汉模式:以时间换空间,当调用工厂方法时才为成员分配内存,但当执行时,会多花很长时间。

饿汉模式:以空间换时间,初始化类时便为成员分配内存,这样可以节省程序运行时间,但会一直占用内存。


笔者认为懒饿两汉最大的不同就是:懒汉线程不安全,饿汉是线程安全的。当多个线程同时访问懒汉的getInstance方法时,他们同时进入if语句中,就可能出现多次为私有成员初始化赋值的情况,这样就出现了线程安全问题,我们可以用synchronized来解决此问题。
0 0