Java-设计模式
Xplorist Lv6

Java-设计模式

reference-site-list

steps

  • 常见设计模式

设计模式列表

  • 单例模式
  • 工厂模式
  • 代理模式
  • 观察者模式(发布-订阅模式)

单例模式

单例模式是一种常用的软件设计模式,在应用这个模式时,单例对象的类必须保证只有一个实
例存在,整个系统只能使用一个对象实例。
优点:不会频繁地创建和销毁对象,浪费系统资源。
可能这会需要你手写一个单例模式,这就得自己去学了,因为单例模式有很多种写法,懒汉模式,
饿汉模式,双重检查模式等。懒汉模式就是用的时候再去创建对象,饿汉模式就是提前就已经加载
好的静态static对象,双重检查模式就是两次检查避免多线程造成创建了多个对象。
单例模式有很多种的写法,我总结一下:
(1)饿汉式单例模式的写法:线程安全
(2)懒汉式单例模式的写法:非线程安全
(3)双检锁单例模式的写法:线程安全

  • 懒汉式单例

Singleton.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package tech.xplorist.y2021.m11.d21;

public class Singleton {
private static Singleton instance;
private Singleton() {
}

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

  • 双检锁单例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package tech.xplorist.y2021.m11.d21;

public class ThreadSafeSingleton {
private static volatile ThreadSafeSingleton instance;

private ThreadSafeSingleton() {
}

public static ThreadSafeSingleton getInstance() {
if (instance == null) {
synchronized (ThreadSafeSingleton.class) {
if (instance == null) {
instance = new ThreadSafeSingleton();
}
}
}
return instance;
}
}

工厂模式

工厂模式有3种:

  1. 简单工厂模式
  2. 工厂方法模式
  3. 抽象工厂模式
  • 简单工厂模式

产品接口,具体产品类,工厂类。产品的创建通过工厂类的静态方法,工厂类根据产品名称来创建相应的产品。
一个工厂里生产多种键盘,既生产机械键盘,也生产薄膜键盘。

  • 工厂方法模式

产品接口,具体产品类,工厂接口,具体工厂类。一个具体产品对于一个具体工厂。只有一种类型的产品,而具体工厂只生产对于的具体产品,工厂只有具体产品类型的区分。
每个工厂只生产一种类型的键盘,生产机械键盘的工厂,生产薄膜键盘的工厂。

  • 抽象工厂模式

不同类型的产品接口,具体产品类,抽象工厂类,不同品牌的具体工厂类。一个具体产品会有工厂和产品类型两种属性,比如xxx工厂生产的yyy产品。具体工厂不仅有产品的类型的属性,还有品牌的属性。
每个工厂只生产该品牌的一套产品,一套产品里有键盘和鼠标两种产品,华硕工厂只生产华硕的鼠标和键盘,戴尔工厂生产戴尔的鼠标和键盘。

代理模式

具体的行为由代理类去调用被代理类的方法,隐藏了方法的源头。
顾客通过代理商去买东西,而代理商实际上不生产产品,产品是从厂家那里拿货。
正向代理:客户端通过VPN去访问服务器,服务器只能知道请求来自VPN,VPN代理了客户端,从而隐藏了客户端。
反向代理:服务器通过Nginx进行反向代理,客户端去访问Nginx,Nginx代理了服务器,从而隐藏了服务端。
静态代理:代理的代码在运行前就已经创建好了。
动态代理:代理的代码在运行的时候才去根据被代理的对象动态生成,重点在于运行时生成。

观察者模式

观察者模式又叫做发布订阅模式,发布方发布内容,要主动通知订阅方。
发布方内部维护了一份订阅方的列表,当发布方发布新消息,会主动给列表里的每个订阅者发送通知。

 评论