Skip to content

十一、设计模式

1、请列举出在 JDK 中几个常用的设计模式?

​ 单例模式(Singleton pattern)用于 Runtime,Calendar 和其他的一些类中。工厂模式(Factory pattern)被用于各种不可变的类如 Boolean,像 Boolean.valueOf,观察者模式(Observer pattern)被用于 Swing 和很多的事件监听中。装饰器设计模式(Decorator design pattern)被用于多个 Java IO 类中。

2、Java 中什么叫单例设计模式?请用 Java 写出线程安全的单例模式

​ 单例模式重点在于在整个系统上共享一些创建时较耗资源的对象。整个应用中只维护一个特定类实例,它被所有组件共同使用。Java.lang.Runtime 是单例模式的经典例子。从 Java 5 开始你可以使用枚举(enum)来实现线程安全的单例。

3、什么叫观察者设计模式(observer design pattern)?

​ 观察者模式是基于对象的状态变化和观察者的通讯,以便他们作出相应的操作。简单的例子就是一个天气系统,当天气变化时必须在展示给公众的视图中进行反映。这个视图对象是一个主体,而不同的视图是观察者。

4、什么是工厂模式

工厂模式是一种创建型设计模式,它提供了一种创建对象的方式,将对象的创建过程封装在一个工厂类中,通过调用工厂类的方法来获取对象,从而实现了对象的解耦和复用。

工厂模式包括三种常见的形式:简单工厂模式、工厂方法模式和抽象工厂模式。

  1. 简单工厂模式:简单工厂模式又称为静态工厂模式,它通过一个工厂类来创建不同类型的对象,根据不同的参数类型返回不同的实例对象。简单工厂模式适用于对象类型比较少,且对象的创建过程比较简单的场景。
  2. 工厂方法模式:工厂方法模式将对象的创建过程抽象成一个工厂接口和多个具体工厂实现类,每个具体工厂实现类负责创建一类对象,通过工厂接口来获取对象。工厂方法模式适用于需要创建多种类型的对象,且对象的创建过程比较复杂的场景。
  3. 抽象工厂模式:抽象工厂模式将对象的创建过程抽象成一个抽象工厂和多个具体工厂实现类,抽象工厂负责创建一组相关的对象,每个具体工厂实现类负责创建一类对象。抽象工厂模式适用于需要创建多组相关的对象,且对象的创建过程比较复杂的场景。

工厂模式的优点是可以将对象的创建和使用分离,降低系统的耦合度和复杂度,同时提高了系统的可维护性和可扩展性。工厂模式可以使得系统更加灵活,可以根据具体的业务需求来选择合适的对象类型,从而提高了系统的性能和效率。

5、什么是模板模式

算法的复用和扩展。

模板模式包含两类角色:抽象类和具体实现类。其中,抽象类定义了一组算法步骤和公共的方法,具体实现类继承抽象类并实现其中的抽象方法,从而完成对算法步骤的具体实现。

模板模式的核心思想是通过抽象类封装算法的公共步骤,将具体的实现细节留给具体实现类来完成,从而实现了算法的复用和扩展。模板模式常用于框架和类库的设计中,也可以在复杂的业务逻辑中使用,从而提高代码的复用性和可维护性。

模板模式的优点包括:

  1. 提高了代码的复用性和可维护性,避免了重复的代码实现;
  2. 提高了代码的可扩展性,允许子类对算法的某些步骤进行重写,从而实现了算法的定制化;
  3. 通过抽象类封装算法的公共步骤,提高了代码的可读性和可理解性。

模板模式的缺点是:

  1. 可能会造成类的数量增加,对于简单的算法,使用模板模式可能会增加代码的复杂度;
  2. 模板模式的扩展性有限,如果需要对算法的整个流程进行修改,可能需要重构整个模板模式的代码。