单例模式确保一个类只有一个实例,而且自行实例化,向整个系统提供这个实例。它的三个特点:
A.只能有一个实例;
B.它必须自行创建这个实例;
C.它必须自行向整个系统提供这个实例。
单例模式分为饿汉单例模式和懒汉单例模式,它们的类图如下:
饿汉模式类图
懒汉模式类图
饿汉单例类与懒汉单例类的区别:
A.饿汉单例类在自己被加载时就将自己实例化,而懒汉单例类是在被调用时再实例化。
B.饿汉单例类对资源的利用率较懒汉单例类要低。
C.饿汉单例类在速度和响应时间较懒汉单例类要快。
使用单例模式的条件:在一个系统要求一个类只有一个实例是才应该用单例模式。
注意事项:
1.在分散式系统中,单例类不一定只有一个实例,所以在分散式系统中尽量不要使用有状态单例模式;
2.工厂模式与建造者模式可常与单例模式配合使用;
3.不完全单例类不推荐使用;
4.单例类与静态全局变量的优势在于:可以有较复杂的内部逻辑,可以有继承关系等;
5.属性管理器经常可以用单例模式来实现。
参考文献:《Java与模式》,阎宏,第十五章.
<!--EndFragment-->