设计模式浅学

Spring 中的种设计模式

创建模式:提供对象创建机制,提升代码灵活度并且复用

工厂模式、单列、工厂方法( FactoryBena 接口,里面有 getObject(); )


结构模式: 将类和对象组装较大的机构,保持结构的灵活性

装饰模式、适配器模式、代理模式


行为模式: 负责对象之间的高效沟通和指责委派

观察者、模版方法、策略模式

创建模式

工厂模式

父类中提供一个创建对象的方法,运行子类决定实例化对象的类型。

  • 编写代码期间,不确定对象实例的类型的时候可以使用工厂方法
  • 考虑到后期代码需要扩展更多的功能的时候
  • 需要复用的对象,不需要每次都重新创建
    • 例如:数据库连接,网络IO
    • Spring 中使用Map 集合来存放所有已经创建好的对象 ConcurrentHashMap
    • 通过反射、CFLIB 来实例化
    • 提供扩展接口
      • BeanPostProcessor
      • Initializing Bean
      • DisposableBena

BeanFactory 就是IOC中的工厂 顶级父类

The root interface for accessing a Spring bean container. 源码第一句

里面还有完整的 生命周期

16542192565366

单列模式

spring 生命 周期本身只对 单列bean 做完整的生命周期管理。多列bean 在创建完后,便不再托管ioc

整个应用中只有一个可用的实例,控制全局统一的变量或资源

AbstractBeanFactory

此类提供了一个单例缓存(通过其基类DefaultSingletonBeanRegistry单例/原型确定、FactoryBean处理、别名、子bean定义的bean定义合并和bean销毁(org.springframework.beans.factory.DisposableBean接口、自定义销毁方法)。此外,它可以通过实现组织来管理bean工厂层次结构(如果bean未知,则委托给父级)。springframework。工厂HierarchicalBeanFactory接口。

16542206571361

结构模式

装饰模式

在原有功能上进行扩展,在无需修改原有代码的情况下,在运行期间对对象增加额外的功能。

16543042210995

  • 在运行时添加或删除对象的功能
  • 多个装饰封装对象来组合几种行为
  • 单一指责。

TransactionAwareCacheDecorator处理事务缓存

ServletRequestWrapper扩展了Request ,

代理模式

spring 中大量使用了代理,AOP、Async、transaction等等,有时候使用不当,会造成一定的冲突,例如:Async,和Transaction一起使用在同一个类上时,会造成代理类,没有@Transcation 注解,非事务方法,调用事务方法,事务失效。@EnableAspectJAutoProxy(exposeProxy = true)添加在启动类 对外暴露代理对象来解决。

适配器模式

使接口不兼容的对象能够相互合作。

  • 当在使用某一个类的时候,接口与代码不兼容的时候,可以使用适配器。通过创建中间层来操作。

16543069485592

这样就是可以实现多种方式创建 controller

  1. @Controller + @RequestMapping
  2. 实现 Controller 接口 + xml 配置
  3. 实现 Servlet 接口 + xml 配置

行为模式

模版模式

RestTemplate 、AsyncRestTemplate 等等

观察者模式

一种订阅机制,在对象事件发生时通知多个观察此对象的其他对象

推荐文章

策略模式

有些带Handler的类实现策略模式的效果。

感觉比较 走分支。例如: 登陆接口,带个登陆策略 本地、qq、的属性, 根据接收的不同属性来,选择登陆方式

底部

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值