10-单例设计模式

1、设计模式:对问题行之有效的解决方式,是一种思想。有23种设计模式,复用性、灵活性、可维护性

2、学设计模式要明确该设计模式可以解决什么问题,明确后就可以知道该设计模式何时使用

3、单例设计模式:保证一个类在内存中的对象的唯一性,即一个类在内存中只能有一个对象

4、实现单例的步骤:

(1)私有化(private)该类的所有构造函数 -- 不允许其他程序用new创建该类对象

(2)通过new在本类中创建一个本类的对象(private)

(3)定义一个公有的方法将创建的对象返回 -- 对外提供一个方法(public)让其他程序可以获取该对象

5、单例的两种形式:

饿汉式:类一加载对象就已经存在了

class Single{
    privete static Single s = new Single();    //不把s设为public对外使用,是因为public的s不可控
    private Single() { }
    public static Single getInstance(){    //方法中可以给获取实例加入某些条件(if)进行限定,可控
        return s;
    }
}

注:其他类中不能创建Single类的对象,所以只能类名调用getInstance(),该方法需为静态static,所以s也为静态static

懒汉式:类加载进来没有对象,只有调用了getInstance()方法才会创建对象。也称为单例设计模式的延迟加载

class Single{
    privete static Single s = null;
    private Single() { }
    public static Single getInstance(){
        if(s == null){
            s = new Single();
        }
        return s;
    }
}

说明:

(1)延迟加载指的是懒汉式,面试时比较多见,但在真正开发时用饿汉式比较合适

(2)懒汉式看起来比较好,但先加载后加载,最终都要用到这个对象(用单例的目的就是为了获取对象),所以先加载后加载都可以。但懒汉式存在一些问题,如果懒汉式被多线程并发访问,存在着安全隐患,即保证不了对象的唯一性。如果要保证对象的唯一性,就要加锁,效率就降低了


猜你喜欢

转载自blog.csdn.net/ruyu00/article/details/79522026