【设计模式】单例模式-Singleton
Ensure a class has only one instance, and provide a global point to access of it.
确保一个类只有一个实例,并提供一个全局点来访问它。
一个类有且仅有一个实例,并且自行实例化向整个系统提供。
单例模式是一种常用的软件设计模式。它的核心结构中只包含一个被称为单例类的特殊类。通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。
如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案。
单例模式满足三个条件:
1.某个类只能有一个实例。
2.类必须自行创建这个类的实例
3.类必须自行向整个系统提供这个实例。
实现方式通过使用private构造函数来确保类不能通过new关键字定义对象,然后自行实现对象返回方法。
我们以总统为例,一个国家只能有一个正总统,代码如下:
// 单例-总统 package com.ycx.pattern.singleton; public class President { // 直接产生对象可以很好的解决并发访问问题 private static final President president = new President(); // 私有构造函数 private President() {}; public static President getInstance() { return president; } public void sayHi() { System.out.println("Hi 大家好!我是总统."); } } // 客户端 package com.ycx.pattern.singleton; public class Client { public static void main(String[] args) { President president1 = President.getInstance(); president1.sayHi(); President president2 = President.getInstance(); president2.sayHi(); System.out.println("判断两个对象是否相同:" + (president1 == president2) ); } }
运行结果:
Hi 大家好!我是总统.
Hi 大家好!我是总统.
判断两个对象是否相同:true
JDK中使用单例模式的例子
public class Runtime { private static Runtime currentRuntime = new Runtime(); public static Runtime getRuntime() { return currentRuntime; } /** Don't let anyone else instantiate this class */ private Runtime() {} }