文章目录
  1. 1. 适用场景
  2. 2. 优点
  3. 3. 缺点
  4. 4. UML结构图
  5. 5. 源码

单例模式(Singleton),保证一个类仅有一个实例,并提供一个访问它的全局访问点。通常我们可以让一个全局变量使得一个对象被访问,但是它不能防止你实例化多个对象。一个最好的的办法就是,让类自身负责保存它的唯一实例。这个类可以保证没有其他实例可以被创建,并且它可以提供一个访问该实例的方法。

适用场景

当某个对象只能存在一个实例的情况下使用单例模式;

优点

  1. 提供了对唯一实例的受控访问。
  2. 由于在系统内存中只存在一个对象,因此可以节约系统资源,对于一些需要频繁创建和销毁的对象单例模式无疑可以提高系统的性能。

缺点

  1. 由于单利模式中没有抽象层,因此单例类的扩展有很大的困难。
  2. 单例类的职责过重,在一定程度上违背了“单一职责原则”。

UML结构图

SingletonPattern

源码

SingletonA:饿汉是单例类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/**
* 单例设计模式中的饿汉式
*
* Created by zhenguo on 12/5/14.
*/

public class SingletonA {

private static SingletonA instance = new SingletonA();

private SingletonA() {
}

public static SingletonA getInstance() {
return instance;
}
}

SingletonB:懒汉是单例类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/**
* 单例设计模式中的懒汉式
*
* Created by zhenguo on 12/5/14.
*/

public class SingletonB {

private static SingletonB instance = null;

private SingletonB() {
}

public static synchronized SingletonB getInstance() {
if (instance == null) {
instance = new SingletonB();
}
return instance;
}
}

Client:客户端调用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
/**
* 单例模式客户端调用
* 简单说来,单例模式(也叫单件模式)的作用就是保证在整个应用程序的生命周期中,
* 任何一个时刻,单例类的实例都只存在一个(当然也可以不存在)。
*
* Created by zhenguo on 12/5/14.
*/

public class Client {

public static void main(String[] args) {
// 饱汉实现方式
SingletonA singletonA1 = SingletonA.getInstance();
SingletonA singletonA2 = SingletonA.getInstance();
if (singletonA1 == singletonA2) {
System.out.println("singletonA1和singletonA2是一个对象");
} else {
System.out.println("singletonA1和singletonA2不是一个对象");
}

// 饿汉实现方式
SingletonB singletonB1 = SingletonB.getInstance();
SingletonB singletonB2 = SingletonB.getInstance();
if (singletonB1 == singletonB2) {
System.out.println("singletonB1和singletonB2是一个对象");
} else {
System.out.println("singletonB1和singletonB2不是一个对象");
}

// 更方便的实现方式 待续...
}

}


本文地址 http://ihongqiqu.com/2014/12/08/singletonpattern/ 作者为 Zhenguo

author:Zhenguo
Author: Zhenguo      Blog: http://ihongqiqu.com/     Email: jinzhenguo1990@gmail.com
I have almost 6 years of Android application development experience and have a keen interested in the latest emerging technologies. I use my spare time to turn my experience, ideas and love for Android tech into informative articles, tutorials and more in hope to help others and learn more.
文章目录
  1. 1. 适用场景
  2. 2. 优点
  3. 3. 缺点
  4. 4. UML结构图
  5. 5. 源码
返回顶部