《Java基础学习笔记》JAVA设计模式之单例模式
设计模式:
解决某一类问题最告之有效的方法,设计模式是纯思想的! Java中有23种设计模式。
一、单例模式(Single): 解决一个类在内存中只有存在一个对象。
想要保证对象的唯一:
1,为了避免其他程序过多建立该类对象。先控制禁止其它他程序建立对象!
2,还为了其他程序可以访问到该类对象,只好在本类中,自定义一个对象!
3,为了方便其他程序对自定义对象的访问,可以对外提供一些访问方式!
代码实现步骤:
1,将构造函数私有化。
2,在类中创建一个本类对象。
3,提供一个方法可以获取到该对象。
/********************饿汉式************************/
package com.pattern.single; /** * 饿汉式(建议在开发时使用此方式) * 先初始化对象。 * Singleton类一进内存就创建对象。 */ public class Singleton { private static Singleton singleton = new Singleton(); private Singleton(){}; public static Singleton GetInstance() { return singleton; } public void Spreak() { System.out.println("我的名字是:"+ singleton); } }
/********************懒汉式************************/
package com.pattern.single; /** * 懒汉式(开发中不建议使用此方式,但面试时出题较多,主要提问在多线程下的解决方案) * 对象是方法被调用时,才初始化。也叫做对象的延时加载。 * Singleton类进内存,对象还没有存在,只有调用了getInstance方法时,才建立对象。 */ public class Singleton { private static Singleton singleton = null; private Singleton(){}; /* * 双重判断并加锁解决多线程下的效率问题。 */ public static Singleton GetInstance() { if(null==singleton) { synchronized (Singleton.class) { if(null==singleton) singleton = new Singleton(); } } return singleton; } public void Spreak() { System.out.println("我的名字是:"+ singleton); } }
/****************************华丽的分隔线***************************/
package com.pattern.single; /** * 多线程下的单例解决方案 */ public class Singleton { private static final Singleton SINGLETON = new Singleton(); private Singleton(){}; public synchronized static Singleton GetInstance() { return SINGLETON; } public void Spreak() { System.out.println("我的名字是:"+ SINGLETON); } } /****************************华丽的分隔线***************************/ package com.pattern.single; public class Program { public static void main(String[] args) { Singleton singleton = Singleton.GetInstance(); singleton.Spreak(); Singleton singleton1 = Singleton.GetInstance(); singleton1.Spreak(); Singleton singleton2 = Singleton.GetInstance(); singleton2.Spreak(); Singleton singleton3 = Singleton.GetInstance(); singleton3.Spreak(); } }