Spring的9种设计模式(三)总结

一.简单工厂

BeanFactory,我们经常会用到BeanFactory.getBean(id)获取对象,这就是简单工厂的体现。
<bean id="" class=""></bean>
特点是:工厂类可以创建多种类型的对象,根据不同的参数,可以获取到不同的对象。

二.工厂方法

2.1静态工厂方法
    标签:

  <bean id="" class="" factory-method="">
        <constructor-arg value=""></constructor-arg>
   </bean>

 2.2实例工厂方法
    跟静态工厂方法的区别在于,静态工厂方法不用实例化工厂类,而实例工厂方法需要。
    标签:
    实例化工厂类

<bean id="instaceFactory" class="springDesignMode.factoryMethod.UserInstaceFactory"></bean>


    对象类:
    factory-bean=“InstanceFactory” :指定使用哪个工厂实例。
    factory-method=“getUser”:使用哪个工厂方法。

 <bean id="user1" factory-bean="instaceFactory" factory-method="getUser">
        <constructor-arg value="qwx"></constructor-arg>
 </bean>


     2.3 FactoryBean工厂创建Bean
    必须实现FactoryBean接口,重写三个方法
    适用场景:
    想在代码里自定义对象的创建逻辑。
    标签:

<bean id="userFactoryBean" class="springDesignMode.factoryMethod.UserFactoryBean"></bean>

三.单例模式

  饿汉式、懒汉式、注册表
    
   饿汉式:在类加载就完成对象的初始化
   懒汉式:第一次访问才初始化。会用到双重检查锁
    
    spring用的是单例注册表:1.使用map实现注册表;2.使用protect修饰构造方法
    单例的源码与单例的三级缓存值得注意。

四.适配器模式

将一个类的接口转换成需求希望的另一个接口。并且能够结合两个不同的接口形成统一的接口提供出去。
    为什么重写呢——提高代码的复用性。
    组成:
        target :目标类
        adaptee:被适配的类
        adapter:适配类
    springAop用到适配器源码暂时还不是很懂。

五.装饰者模式

在不改变原有类的基础上,扩展原有对象的功能。
    与适配器不同之处在于,装饰者注重类的继承(同宗同源),而适配器注重接口的转换。
    组成:
        抽象构建角色(被装饰接口)
        具体构建角色(被装饰类)
        抽象装饰角色(装饰接口)
        具体装饰角色(装饰类)
    spring装饰者模式源码还需要理解。

六.代理模式

提供一种代理以控制对这个对象的访问。
    与装饰者模式的异同:
        同:装饰者和被装饰者都实现一个接口;代理类和真实处理的类也都实现同一个接口。
            
        异:装饰者模式使用的是外部传入的被装饰对象,调用者只想要你把他的对象装饰一下。而代理模式使用的是自己构造方法里面new出来的一个被代理的对象,不是调用者传入的。
            装饰者注重对对象功能的扩展,代理注重控制对象的访问。
    springAop应用到代理模式源码需要细读


七.观察者模式    

观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态上发生变化时,会通知所有观察者对象,使它们能够自动更新自己。 

场景:一个事件触发了一系列事件。
小例子:我们订阅了某个公众号之后,公众号就会维护一个订阅用户列表,每当发表一篇文章,就会向这个订阅用户列表发送这篇文章。

spring事件驱动由三部分组成:

  • 事件:ApplicationEvent,继承自JDK的EventObject,所有事件将继承它,并通过source得到事件源。

  • 事件发布者:ApplicationEventPublisher及ApplicationEventMulticaster接口,使用这个接口,我们的service就有了发布事件的能力。

  • 事件订阅者:ApplicationListener,继承自JDK的EventListener,所有监听器将继承它。

 spring观察者源码还需要认真阅读。

八、策略模式 

场景:实现一个功能,可以有多种不同的方式,我们可以根据不同的条件确定不同的方式去实现这个功能。例如:比如支付方式的选择,可以用银联、微信、支付宝,根据不同的入参,确定不同的支付方式,走不同的逻辑。

九、模板模式

在spring源码中的应用需要认真阅读。生疏指数高。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值