说一下你熟悉的设计模式?

单例模式:保证被创建一次,节省系统开销。
工厂模式(简单工厂、抽象工厂):解耦代码。
观察者模式:定义了对象之间的一对多的依赖,这样一来,当一个对象改变时,它的所有的依赖者都会收到通知并自动更新。
外观模式:提供一个统一的接口,用来访问子系统中的一群接口,外观定义了一个高层的接口,让子系统更容易使用。
模版方法模式:定义了一个算法的骨架,而将一些步骤延迟到子类中,模版方法使得子类可以在不改变算法结构的情况下,重新定义算法的步骤。
状态模式:允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。

简单工厂和抽象工厂有什么区别?

简单工厂:用来生产同一等级结构中的任意产品,对于增加新的产品,无能为力。
工厂方法:用来生产同一等级结构中的固定产品,支持增加任意产品。
抽象工厂:用来生产不同产品族的全部产品,对于增加新的产品,无能为力;支持增加产品族。

Spring 框架中使用的设计模式

  • 工厂设计模式
    • Spring使用工厂模式通过 BeanFactory、ApplicationContext 创建 bean 对象
  • 代理设计模式
    • Spring AOP 功能的实现
  • 单例设计模式
    • Spring 中的 Bean 默认都是单例的
  • 模板方法模式
    • Spring 中 jdbcTemplate、hibernateTemplate 等以 Template 结尾的对数据库操作的类,它们就使用到了模板模式
  • 包装器设计模式
    • 我们的项目需要连接多个数据库,而且不同的客户在每次访问中根据需要会去访问不同的数据库。这种模式让我们可以根据客户的需求能够动态切换不同的数据源
  • 观察者模式
    • Spring 事件驱动模型就是观察者模式很经典的一个应用
  • 适配器模式
    • Spring AOP 的增强或通知(Advice)使用到了适配器模式、spring MVC 中也是用到了适配器模式适配Controller。

Java 中使用的设计模式

工厂设计模式、代理设计模式、单例设计模式(Runtime)、合成设计模式、门面设计模式(PreintStream、PrintWriter)、模板设计模式(Servlet)。