0%

design

Design

  • 创建型设计模式:负责对象的实例创建
  • 结构型设计模式:负责对象的结构包装
  • 行为型设计模式:负责对象的行为控制

对象关系和UML类图

  • 纵向关系(泛化关系)
    • 继承
    • 实现
  • 横向关系(依赖关系)
    • 依赖:两个对象是各自独立的关系
    • 关联:两个对象是各自独立的关系
    • 聚合:两个对象是整体和部分的关系(has-a)
    • 组合:两个对象是整体和部分的关系(contains-a)

ps:聚合是弱组合,组合是强聚合,聚合中的被聚合的对象可以共享,组合中的被组合的对象不能共享
ps:依赖是弱关联,关联是强依赖,依赖是临时的和单向的,关联是长期的和双向的

Creator(创建型设计模式)

  • 单例模式
  • 原型模式
  • 工厂模式
    • 简单工厂
    • 工厂方法
    • 抽象工厂
  • 建造者模式

ps:原型模式又叫克隆模式

Singleton(单例模式)

ps:枚举类单例可以防止单例被破坏(克隆、反射、序列化和反序列化)

饿汉式

1
2
3
4
5
6
7
8
9
public class Singleton {
private static Singleton INSTANCE = new Singleton();

private Singleton() {}

public static Singleton getInstance() {
return INSTANCE;
}
}

懒汉式

1
2
3
4
5
6
7
8
9
10
11
12
13
public class Singleton {
private static volatile Singleton INSTANCE;

private Singleton() {}

public static synchronized 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
public class Singleton {
private static volatile Singleton INSTANCE;

private Singleton() {}

public static Singleton getInstance() {
if (INSTANCE == null) {
synchronized (Singleton.class) {
if (INSTANCE == null) {
INSTANCE = new Singleton();
}
}
}

return INSTANCE;
}
}

内部类

1
2
3
4
5
6
7
8
9
10
11
12
public class Singleton {
private Singleton() {
}

private static class SingletonHolder{
private static Singleton INSTANCE = new Singleton();
}

public static Singleton getInstance(){
return SingletonHolder.INSTANCE;
}
}

枚举类

1
2
3
4
5
6
7
public enum Singleton {
INSTANCE;

public static Singleton getInstance(){
return INSTANCE;
}
}

Prototype(原型模式)

Factory(工厂模式)

Builder(建造者模式)

Structure(结构型设计模式)

  • 代理模式:代理对象的访问
  • 装饰模式:增强对象的功能
  • 适配模式:对不兼容的对象进行包装
  • 桥接模式:将接口和实现进行分离
  • 外观模式:为复杂的系统提供统一的入口
  • 组合模式:实现树形结构
  • 享元模式:缓存对象并重复使用

ps:外观模式又叫门面模式

Behavior(行为型结构模式)

  • 模版模式(父类实现公共的逻辑和子类实现不同的逻辑)
  • 状态模式(根据不同的状态执行不同的操作)(可以用接口和实现类来消除if等条件语句)
  • 策略模式(根据不同的选择执行不同的操作)(可以用接口和实现类来消除if等条件语句)
  • 观察者模式(监听和接收状态的变化)
  • 迭代器模式(迭代容器内部的元素)
  • 责任链模式(链式处理问题)
  • 命令模式(引入命令对象来解耦命令的发出者和接收者)
  • 备忘录模式(备份和恢复对象)
  • 中介者模式(引入中介对象来隐藏具体的服务提供者)
  • 访问者模式
  • 解释器模式
只想买包辣条