Java 设计模式

前言

1、创建型设计模式

  • 工厂模式
  • 抽象工厂模式
  • 单例模式
  • 生成器模式
  • 原型模式

1.1 单例模式

  • 单例模式:又叫做 Singleton 模式,指的是一个类,在一个 JVM(Java 虚拟机)里,只有一个实例存在。

  • 三元素

    • 构造方法私有化。
    • 静态属性指向实例。
    • public staticgetInstance 方法,返回第二步的静态属性。

1.1.1 饿汉式单例模式

  • 通过私有化其构造方法,使得外部无法通过 new 得到新的实例。

  • 提供了一个 public staticgetInstance 方法,外部调用者通过该方法获取定义的对象,而且每一次都是获取同一个对象,从而达到单例的目的。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public class GiantDragon {

    private GiantDragon() { // 私有化构造方法使得该类无法在外部通过 new 进行实例化
    }

    private static GiantDragon instance = new GiantDragon(); // 准备一个类属性,指向一个实例化对象。因为是类属性,所以只有一个

    public static GiantDragon getInstance() { // public static 方法,提供给调用者获取定义的对象
    return instance;
    }
    }
    1
    GiantDragon g1 = GiantDragon.getInstance();

1.1.2 懒汉式单例模式

  • 懒汉式 单例模式与 饿汉式 单例模式不同,只有在调用 getInstance 的时候,才会创建实例。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public class GiantDragon {

    private GiantDragon() { // 私有化构造方法使得该类无法在外部通过 new 进行实例化
    }

    private static GiantDragon instance; // 准备一个类属性,用于指向一个实例化对象,但是暂时指向 null

    public static GiantDragon getInstance() { // public static 方法,返回实例对象
    if (null == instance) { // 第一次访问的时候,发现 instance 没有指向任何对象,这时实例化一个对象
    instance = new GiantDragon();
    }
    return instance; // 返回 instance 指向的对象
    }
    }
    1
    GiantDragon g1 = GiantDragon.getInstance();

1.1.3 使用方式

  • 饿汉式 是立即加载的方式,无论是否会用到这个对象,都会加载。如果在构造方法里写了性能消耗较大,占时较久的代码,比如建立与数据库的连接,那么就会在启动的时候感觉稍微有些卡顿。

  • 懒汉式 是延迟加载的方式,只有使用的时候才会加载。并且有线程安全的考量。使用懒汉式,在启动的时候,会感觉到比饿汉式略快,因为并没有做对象的实例化。但是在第一次调用的时候,会进行实例化操作,感觉上就略慢。

  • 看业务需求,如果业务上允许有比较充分的启动和初始化时间,就使用饿汉式,否则就使用懒汉式。

2、结构型设计模式

  • 适配器模式
  • 桥接模式
  • 过滤器/标准模式
  • 组合模式
  • 装饰模式
  • 外观模式
  • 代理模式

3、行为型设计模式

  • 责任链模式
  • 命令模式
  • 迭代器模式
  • 观察者模式
  • 中介者模式
  • 解释器模式
  • 状态模式
  • 空对象模式
  • 策略模式
  • 模板方法模式
  • 访问者模式
  • MVC 模式

4、JEE 设计模式

  • 数据访问对象模式
文章目录
  1. 1. 前言
  2. 2. 1、创建型设计模式
    1. 2.1. 1.1 单例模式
      1. 2.1.1. 1.1.1 饿汉式单例模式
      2. 2.1.2. 1.1.2 懒汉式单例模式
      3. 2.1.3. 1.1.3 使用方式
  3. 3. 2、结构型设计模式
  4. 4. 3、行为型设计模式
  5. 5. 4、JEE 设计模式
隐藏目录