Spring中的设计模式

1、工厂模式

BeanFactory是典型的工厂方法模式,其有多个实现,不同的实现有不同的getBean方法,默认实现是DefaultListalbeBeanFactory,我们也可以定义自己的工厂实现BeanFactory接口,重写里面的getBean方法

2、单例模式

在spring中有scope是singleton的bean,但是它不等于单例模式,singleton指的是容器中该对象的bean只有一个,和单例模式不是一回事,单例模式指的整个jvm只有一个实例对象。使用Mybatis时,其连接工厂SqlSessionFactory是单例模式,在spring中我暂时没找哪个对象是单例,后续进行补充。

3、观察者模式

spring中的时间event都采用的观察者模式
20221226114253

4、适配器模式

SpringMVC

5、代理模式

SpringAOP整个就采用的代理模式

6、模板方法模式

7、包装模式(装饰者模式)

在IOC容器中,反射创建了实例对象以后,会对其进行包装。参考org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#instantiateBean


	/**
	 * Instantiate the given bean using its default constructor.
	 * @param beanName the name of the bean
	 * @param mbd the bean definition for the bean
	 * @return a BeanWrapper for the new instance
	 */
	protected BeanWrapper instantiateBean(final String beanName, final RootBeanDefinition mbd) {
		try {
			Object beanInstance;
			final BeanFactory parent = this;
			if (System.getSecurityManager() != null) {
				beanInstance = AccessController.doPrivileged((PrivilegedAction<Object>) () ->
						getInstantiationStrategy().instantiate(mbd, beanName, parent),
						getAccessControlContext());
			}
			else {
				beanInstance = getInstantiationStrategy().instantiate(mbd, beanName, parent);
			}
			BeanWrapper bw = new BeanWrapperImpl(beanInstance);
			initBeanWrapper(bw);
			return bw;
		}
		catch (Throwable ex) {
			throw new BeanCreationException(
					mbd.getResourceDescription(), beanName, "Instantiation of bean failed", ex);
		}
	}

8、原型模式

spring中prototype类型的bean采用的原型模式

9、策略模式

gpt回答

  1. 工厂模式(Factory Pattern):Spring中BeanFactory就是使用了工厂模式,通过BeanFactory可以获取到所需要的对象实例。

  2. 单例模式(Singleton Pattern):Spring中的Bean默认是单例的,即在容器中只有一个实例。

  3. 代理模式(Proxy Pattern):Spring AOP基于动态代理实现,通过代理模式实现了面向切面编程。

  4. 观察者模式(Observer Pattern):Spring中的事件驱动机制就是基于观察者模式实现的。

  5. 模板模式(Template Pattern):Spring中的JdbcTemplate和HibernateTemplate就是使用了模板模式,将模板代码和具体实现分开,提高了代码的复用性和可维护性。

  6. 适配器模式(Adapter Pattern):Spring中的适配器模式主要应用在MVC模块中,通过适配器将请求转发给对应的Controller处理。

  7. 策略模式(Strategy Pattern):Spring中的策略模式主要应用在事务管理模块中,通过定义不同的事务策略来实现不同的事务管理方式。

  8. 迭代器模式(Iterator Pattern):Spring中的迭代器模式主要应用在集合操作中,提供了统一的遍历方式,增加了代码的可读性和可维护性。

  9. 组合模式(Composite Pattern):Spring中的BeanFactory和ApplicationContext都是采用了组合模式,将多个对象组合成一个树形结构,提供了统一的访问方式。

  10. 模板方法模式(Template Method Pattern):Spring的JdbcTemplate和HibernateTemplate使用了模板方法模式,将通用的代码封装在父类中,子类只需要实现具体的业务逻辑。

  11. 工厂方法模式(Factory Method Pattern):Spring的BeanFactory和ApplicationContext使用了工厂方法模式,将对象的创建交给子类或者工厂类,提高了代码的灵活性和可扩展性。

  12. 装饰器模式(Decorator Pattern):Spring的BeanPostProcessor就是使用了装饰器模式,通过在对象创建后动态地增加一些功能,扩展了对象的功能性。

  13. 门面模式(Facade Pattern):Spring的Facade模式主要应用在Spring MVC中,将复杂的请求处理过程封装成一个简单的接口,提供了统一的访问方式。

  14. 状态模式(State Pattern):Spring的TransactionState就是使用了状态模式,通过定义不同的事务状态来控制事务的提交和回滚。

  15. 过滤器模式(Filter Pattern):Spring的FilterChain就是使用了过滤器模式,将多个过滤器组合成一个链,按照顺序依次处理请求。

总之,Spring框架使用了多种设计模式,这些设计模式不仅提高了代码的可读性和可维护性,还提高了代码的复用性和扩展性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值