一、Java中常用的24种设计模式

  • 1.1、Design Factory Pattern(设计工厂模式)
  • 1.2、Singleton Pattern(单例模式)
  • 1.3、Builder Pattern(建造者模式)
  • 1.4、Prototype Pattern(原型模式)
  • 1.5、Adapter Pattern(适配器图案)
  • 1.6、Bridge Pattern(桥型)
  • 1.7、Filter Pattern(筛选模式)
  • 1.8、Composite Pattern(复合图案)
  • 1.9、Decorator Pattern(装饰图案)
  • 1.10、Facade Pattern(外墙图案)
  • 1.11、Flyweight Pattern(跳线模式)
  • 1.12、Proxy Pattern(代理模式)
  • 1.13、Command Pattern(命令模式)
  • 1.14、Interpreter Pattern(口译模式)
  • 1.15、Iterator Pattern(迭代器模式)
  • 1.16、Mediator Pattern(中介者模式)
  • 1.17、Memento Pattern(纪念图案)
  • 1.18、Observer Pattern(观察者模式)
  • 1.19、State Pattern(状态模式)
  • 1.20、Null Object Pattern(空对象模式)
  • 1.21、Strategy Pattern(策略模式)
  • 1.22、Template Pattern(模板图案)
  • 1.23、Visitor Pattern(访客模式)
  • 1.24、MVC Pattern(MVC模式)
  • 1.25、Business Delegate Pattern(业务代表模式)
  • 1.26、Abstract Factory Pattern(抽象工厂模式)
  • 1.27、Chain of Responsibility Pattern(责任链模式)
  • 1.28、Composite Entity Pattern(复合实体模式)
  • 1.29、Data Access Object Pattern(数据访问对象模式)
  • 1.30、Front Controller Pattern(前控制器模式)
  • 1.31、Intercepting Filter Pattern(拦截滤镜模式)
  • 1.32、Service Locator Pattern(服务定位器模式)
  • 1.33、Transfer Object Pattern(转移对象模式)

二、Spring中设计模式的体现(目前已知12种)

2.1、Factory(工厂模式)

Spring框架通过以下两种方法将工厂设计模式用于bean对象的创建。

  • Spring BeanFactory容器
    它是spring框架中提供的最简单的容器,它为DI(依赖注入)提供了基本支持。我们使用以下接口来处理此容器。[org.springframework.beans.factory.BeanFactory]。

  • Spring ApplicationContext容器
    它是spring容器中存在的另一个容器,它增加了企业特定的功能。这些功能包括以下功能:解析来自属性文件的文本消息,并将应用程序事件发布到关注的事件侦听器。我们使用以下接口来处理此容器。[org.springframework.context.ApplicationContext]。以下是最常用的ApplicationContext实现。FileSystemXmlApplicationContext(需要向构造函数提供XML bean配置文件的完整路径)。ClassPathXmlApplicationContext(需要设置bean配置XML文件的CLASSPATH,以便从XML文件加载bean的元数据)。WebXmlApplicationContext(容器在具有所有bean元数据的Web应用程序中加载XML文件)。

// Spring uses factory pattern to create instances of the objects
BeanFactory factory = new XmlBeanFactory(new FileSystemResource(“spring.xml”));
Dog dog= (Dog) factory.getBean(“dog”);
dog.eat();

2.2、Proxy/Dynamic proxy(JDK、Cglib等)

在AOP,事务机制,远程调用过程中中大量使用

2.3、MVC

Spring MVC的优点是您的控制器是POJO,而不是servlet,控制器只需返回逻辑视图名,并且将视图选择留给单独的ViewResolver。这样可以更轻松地将控制器重用于不同的视图技术。

2.4、Front Controller(前端控制器)

Spring提供DispatcherServlet,以确保传入的请求被调度到中央控制器。

2.5、View Helper

Spring有许多自定义JSP标签和Velocity模板定义,以帮助将代码与视图中的展现分离。

2.6、Template method(模板方法)

大量用于重复性的代码(例如干净地关闭连接等)。例如JdbcTemplate,JmsTemplate,JpaTemplate。

2.7、Prototype(原型模式)实例类型可以是原型。

2.8、Builder(构造器模式)Spring提供了通过BeanDefinitionBuilder对象,使用构建器模式来构造BeanDefinition的编程方法。

package org.springframework.beans.factory.support;
public class BeanDefinitionBuilder {
   
	public static BeanDefinitionBuilder genericBeanDefinition() {
   
		return new BeanDefinitionBuilder(new GenericBeanDefinition());
	}
	public static BeanDefinitionBuilder genericBeanDefinition(String beanClassName) {
   
		BeanDefinitionBuilder builder = new BeanDefinitionBuilder(new GenericBeanDefinition());
		builder.beanDefinition.setBeanClassName(beanClassName);
		return builder;
	}
	public static BeanDefinitionBuilder genericBeanDefinition(Class<?> beanClass) {
   
		BeanDefinitionBuilder builder = new BeanDefinitionBuilder(new GenericBeanDefinition());
		builder.beanDefinition.setBeanClass(beanClass);
		return builder;
	}
....省略很多
}

2.9、 IOC(依赖注入)

依赖注入是软件工程中的一种技术,其中一个对象可以提供另一个对象的依赖。可以由对象使用的这种依赖关系称为Service,注入是将依赖关系传递给使用该依赖关系的对象。控制反转或IOC是软件工程中的设计原则,通过该原则,自定义编写的计算机程序部分可以从通用框架接收控制流。Spring框架具有一个IOC容器,该容器负责对象的创建,将对象连接在一起,配置这些对象并处理这些对象从创建到完全销毁的整个生命周期。该容器具有依赖注入(DI),用于管理应用程序中存在的组件。这样的对象被称为Spring Beans。依赖注入或IOC容器是在Spring框架中用于解耦过程的主要原理。

2.10、Singleton(单例模式)

默认情况下,在spring xml配置文件中定义的bean仅创建一次。不管使用getBean()方法进行了多少次调用,它始终只会有一个bean。这是因为,默认情况下,spring中的所有bean都是单例。
可以使用Prototype bean scope重写,重写后,spring将为每个请求创建一个新的bean对象。
Singleton模式

<!-- To specify singleton scope is redundant -->
<bean id="beanId" class="com.howtodoinjava.BeanClass" scope="singleton" />
//or
<bean id="beanId" class="com.howtodoinjava.BeanClass" />

prototype模式

@Component
@Scope("prototype")
public class BeanClass {
   
}
<bean id="beanId" class="com.howtodoinjava.BeanClass" scope="prototype" />

还有包括RequestScope,SessionScope,ApplicationScope,websocket Scope,自定义等等,可参考这里

2.11、chain-of-responsibility(责任链模式)

SpringMVC 关于DispatcherServlet的部分,对请求的分发,拦截,过滤等,就是基于责任链的模式实现。

2.12、观察者模式

在Spring的事件驱动实现中,用到了观察者模式
SpringEventPublish这个对象。。。