Java设计模式之单例模式
单例模式是什么?
保证一个类仅有一个实例,并提供一个访问它的全局访问点。
单例模式如何来设计呢?
保证一个类只能有一个实例,那么我们不能无限制的new 来创建,因为我们知道,new一次就是一个新的对象,那么构造器只能私有化private -- 构造器私有化
构造器私有化了,问题又出现了,构造器私有化了,那么我们怎么来创建唯一的对象呢?-- 提供一个公有的方法/提供一个公有的静态属性
再分析一下,公有方法, 实例方法还是类方法呢?--公有的类方法(获取类实例)
依据以上的推测设计我们可以得出单例类的大致结构:
public class Singleton { //第一:构造器私有化 private Singleton(){} //第二:可能1.提供一个共有的类方法 public static Singleton getInstance(){ return null;// 这儿先返回null 让方法编译通过 } //第二:可能2. 静态属性 public static Singleton instance;//但是问题是这儿怎么给instance赋值呢??????? }
现在又出现了一个问题,我们的这个类的唯一实例如何获取?
直接在getInstance() 中new Singleton() -- 不行哎,调用一次方法重新创建了一个新的对象
大家在想想,我们上面是不是有一个静态属性啊,静态属性只是在类加载的时候初始化的,而且只是在类加载时初始化的。
ok,那么我们就可以设计出单例模式了,根据我们设计出来的可以有两种简单不同的获取对象的方式,一些文人雅士把这两种获取对象的方式分别叫做 饱汉式 和饿汉式。
package com.jsd.jsd1404.design; public class Singleton { private static Singleton instance; public static Singleton getInstance(){ if(instance==null){ synchronized (Singleton.class) { instance=new Singleton(); } } return instance; } private Singleton(){ } }