单例设计模式(掌握) A、单例设计模式:保证类在内存中只有一个对象。 B、如何保证类在内存中只有一个对象呢? (1)控制类的创建,不让其他类来创建本类的对象,私有构造方法。private (2)在本类中定义一个本类的对象。Singleton s; (3)提供公共的访问方式。 public static Singleton getInstance(){return s} C、单例写法两种: (1)饿汉式 开发用这种方式。 class Singleton { //1,私有构造函数 private Singleton(){} //2,创建本类对象 private static Singleton s = new Singleton(); //3,对外提供公共的访问方法 public static Singleton getInstance() { return s; } } (2)懒汉式 面试写这种方式。存在多线程的问题,可用同步代码块解决。 // 懒汉式,单例的延迟加载模式 class Singleton { // 1,私有构造函数 private Singleton() { } // 2,声明一个本类的引用 private static Singleton s; // 3,对外提供公共的访问方法 public static Singleton getInstance() { if (s == null) // 线程1,线程2 s = new Singleton(); return s; } } 同步代码解决: class Ins{ private Ins(){} private static Ins s ; public static Ins getIns() { if (s==null) { synchronized(Ins.class){ if (s == null) { s = new Ins(); } } } return s; } }· (3)第三种格式 class Singleton { private Singleton() {} //final是最终的意思,被final修饰的变量不可以被更改 public static final Singleton s = new Singleton(); } D: 饿汉式和懒汉式的区别 a,饿汉式是空间换时间,懒汉式是时间换空间 b,在多线程访问时,饿汉式不会创建多个对象,而懒汉式有可能会创建多个对象。
|