Java之单例设计
操作系统中存在多种单例设计的实例,如:Windows系统的回收站,不论是桌面打开还是在文件夹中打开,都是打开的同一个回收站。
说明回收站这个对象就是单例实例。
第一种单例设计:(饿汉式)
package Demo_1_25_单例设计; // 单例类 // 要求主类中只能有一个实例化对象: // 在所需要的实例化类中实现定义一个本类对象属性,并将名称引用设置为static,final的常量 public class Singleton { private static final Singleton SINGLETON = new Singleton(); // 设置为属性,然后封装 private Singleton() {} // 构造方法私有化,外部无法调用构造方法,也就是无法从其它类产生实例化对象 public static Singleton getSINGLETON() { // 必须设置getter方法,因为属性被private所限制,所以即使是static修饰,也无法从外部类使用 类名. 的形式调用 return SINGLETON; } public void print() { System.out.println("www"); } }
第二种单例设计:(懒汉式)(需要考虑线程同步)
package Demo_1_25_单例设计; // 单例类 // 要求主类中只能有一个实例化对象: // 在所需要的实例化类中实现定义一个本类对象属性,并将名称引用设置为static,final的常量 public class Singleton { private static Singleton singleton = new Singleton(); // 设置为属性,然后封装 private Singleton() {} // 构造方法私有化,外部无法调用构造方法,也就是无法产生实例化对象 public static Singleton getSingleton() { // 必须设置getter方法,因为属性被private所限制 if (singleton == null){ // 只有在第一次才创建,其后对象都不为空 singleton = new Singleton(); } return singleton; } public void print() { System.out.println("www"); } }
package Demo_1_25_单例设计; public class Main { public static void main(String[] args) { Singleton instance = null ; // 声明对象 // private Singleton() {} // 构造方法私有化 // instance = new Singleton(); // 实例化出错 instance = Singleton.getSINGLETON(); instance.print(); } }