创建型
单例
确保一个类只有一个实例,并提供该实例的全局访问点。
懒汉式-线程不安全
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17/**
* @desc 懒汉式-线程不安全
* @Author xw
* @Date 2019/11/15
*/
public class SingletonOne {
private static SingletonOne instance;
private SingletonOne() {
}
public static SingletonOne getInstance() {
if (instance == null) {
instance = new SingletonOne();
}
return instance;
}
}饿汉式-线程安全
1
2
3
4
5
6
7
8
9
10
11
12
13
14/**
* @desc 饿汉式-线程安全
* @Author xw
* @Date 2019/11/15
*/
public class SingletonTwo {
private static SingletonTwo instance = new SingletonTwo();
private SingletonTwo() {
}
public static SingletonTwo getInstance() {
return instance;
}
}懒汉式-线程安全
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17/**
* @desc 懒汉式-线程安全
* @Author xw
* @Date 2019/11/15
*/
public class SingletonThree {
private static SingletonThree instance;
private SingletonThree() {
}
public static synchronized SingletonThree getInstance() {
if (instance == null) {
instance = new SingletonThree();
}
return instance;
}
}双重校验锁-线程安全
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21/**
* @desc 双重校验锁-线程安全
* @Author xw
* @Date 2019/11/15
*/
public class SingletonFour {
private volatile static SingletonFour instance;
private SingletonFour() {
}
public static SingletonFour getInstance() {
if (instance == null) {
synchronized (SingletonFour.class) {
if (instance == null) {
instance = new SingletonFour();
}
}
}
return instance;
}
}静态内部类实现
1
2
3
4
5
6
7
8
9
10
11
12
13/**
* @desc 静态内部类
* @Author xw
* @Date 2019/11/15
*/
public class SingletonFive {
private static class SingletonHolder {
private static final SingletonFive INSTANCE = new SingletonFive();
}
public static SingletonFive getInstance() {
return SingletonHolder.INSTANCE;
}
}枚举
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24/**
* @desc 枚举
* @Author xw
* @Date 2019/11/15
*/
public enum SingletonSix {
INSTANCE;
private String objectName;
public String getObjectName() {
return objectName;
}
public void setObjectName(String objectName) {
this.objectName = objectName;
}
public static void main(String[] args) {
SingletonSix firstSingleton = SingletonSix.INSTANCE;
firstSingleton.setObjectName("firstName");
System.out.println(firstSingleton.getObjectName());
SingletonSix secondSingleton = SingletonSix.INSTANCE;
secondSingleton.setObjectName("secondName");
System.out.println(firstSingleton.getObjectName());
System.out.println(secondSingleton.getObjectName());
}
}
简单工厂
在创建一个对象时不向客户暴露内部细节,并提供一个创建对象的通用接口。
1 | /** |
工厂方法
定义了一个创建对象的接口,但由子类决定要实例化哪个类。工厂方法把实例化操作推迟到子类。
1 | /** |
抽象工厂
提供一个接口,用于创建相关的对象家族。
1 | /** |
原型模式
使用原型实例指定要创建对象的类型,通过复制这个原型来创建新对象。
1 | /** |
行为型
责任链
使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这
条链发送该请求,直到有一个对象处理它为止。
1 | /** |
命令
将命令封装成对象中,具有以下作用:
- 使用命令来参数化其它对象
- 将命令放入队列中进行排队
- 将命令的操作记录到日志中
- 支持可撤销的操作
1 | /** |
解释器
为语言创建解释器,通常由语言的语法和语法分析来定义。
1 | /** |
迭代器
提供一种顺序访问聚合对象元素的方法,并且不暴露聚合对象的内部表示。
1 | public class Client { |
中介者
集中相关对象之间复杂的沟通和控制方式。
1 | public class Client { |
观察者
定义对象之间的一对多依赖,当一个对象状态改变时,它的所有依赖都会收到通知并且自动更新状态。主题(Subject)是被观察的对象,而其所有依赖者(Observer)称为观察者。
1 | public class WeatherStation { |
略