单例模式: 保证一个类仅有一个实例,并提供一个访问它的全局访问点。
适用性:
- 当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时。
- 当这个唯一实例应该是通过子类化可扩展的,并且客户应该无需更改代码就能使用一个扩展的实例时。
实现1:Singleton1.java
- package lc.gof23.singleton;
- /**
- *
- * @author lc
- *
- */
- public class Singleton1 {
- // 在自己内部定义自己一个实例
- private static Singleton1 singleton = new Singleton1();
- // 注意这是private 只供内部调用
- private Singleton1() {
- }
- // 这里提供了一个供外部访问本class的静态方法,可以直接访问
- public static Singleton1 getInstance() {
- return singleton;
- }
- }
- 实现2. Singleton2.java
-
- package lc.gof23.singleton;
- /**
- *
- * @author lc
- *
- */
- public class Singleton2 {
- private static Singleton2 singleton = null;
- private Singleton2() {
- }
- // 这个方法比上面有所改进,不用每次都进行生成对象,只是第一次
- // 使用时生成实例,提高了效率
- public static synchronized Singleton2 getInstance() {
- if (singleton == null) {
- singleton = new Singleton2();
- }
- return singleton;
- }
- }