什么是设计模式? 其实简单的理解就是前人留下来的一些经验的总结,然后把这些经验起了名字叫设计模式, 通过使用设计模式可以让我们的代码复用性更高,可维护性更高,让你的代码写的更加优雅。
饿汉式
public class UserManager { private static final UserManager ourInstance = new UserManager(); public static UserManager getInstance() { return ourInstance; } private UserManager() { } }
饿汉式是最简单的实现方式,这种实现方式适合在那些再初始化时就用到的单例情况, 这种方式简单暴力,如果单例对初始化非常快,而且占用内存的非常小的时候这种方式是比较适合的,可以直接的在应用启动时加载并初始化。 但是,如果单例初始化的操作耗时比较长,而且应用对于启动速度又有要求,或者单例的占用的内存比较大,再或者单例只是再某个特定的场景的情况下才会被使用,而一般的情况下是不会使用时, 使用饿汉式的单例模式时不合适的,这样就需要用到懒汉式的方式去按需要延迟加载单例 。
懒汉式
public class UserManager { private static UserManager instance = null; public UserManager() { } public static UserManager getInstace() { if (null == instance) { instance = new UserManager(); } return instance; } }
懒汉式与饿汉式的最大区别就是将单例的初始化操作,延迟到需要的时候才进行,这样做在某些场合中有很大用处。比如某个单例用的次数不是很多,但是这个单例提供的功能又非常复杂,而且加载和初始化要消耗大量的资源,这个时候使用懒汉式就是非常不错的选择。
多线程下的单例模式
上面介绍了一些单例模式的基本应用方法,但是上面所说的那些使用方式都是有一个隐含的前提,那就是他们都是应用在单线程条件下,一旦换成了多线程就有出错的风险。