一.简单工厂

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源码中的应用需要认真阅读。生疏指数高。

Spring的9种设计模式(三)总结相关推荐

  1. java 用映射写工厂类_java23种设计模式——三、工厂模式

    目录 工厂模式 工厂模式介绍 工厂模式是我们最常用的实例化对象模式了,是用工厂方法代替new操作的一种模式.著名的Jive论坛 ,就大量使用了工厂模式,工厂模式在Java程序系统可以说是随处可见.因为 ...

  2. JAVA六大设计原则 和 23种设计模式

    相关书籍:<大话设计模式>.<Java设计模式>.<设计模式之禅>.<研磨设计模式>.<Head First 设计模式> JAVA六大设计原 ...

  3. 面试官:Spring 用了哪些设计模式?说三种即可 = =

    面试官:Spring 用了哪些设计模式?说三种即可 = = 转载:https://mp.weixin.qq.com/s/LGD54XaK4RmhZHxtU0BADg 转载理由:还可以

  4. 9种设计模式在Spring中的运用,一定要非常熟练!

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:iCoding91 https://blog.csdn.ne ...

  5. Spring 中经典的 9 种设计模式,打死也要记住啊!

    点击上方 好好学java ,选择 星标 公众号重磅资讯,干货,第一时间送达今日推荐:分享一套基于SpringBoot和Vue的企业级中后台开源项目,这个项目有点哇塞!个人原创100W +访问量博客:点 ...

  6. controller调用另一个controller中的方法 获取返回值_必须掌握!你知道 Spring 中运用的 9 种设计模式吗 ?...

    Spring中涉及的设计模式总结,在面试中也会经常问道 Spring 中设计模式的问题.本文以实现方式.实质.实现原理的结构简单介绍 Sping 中应用的 9 种设计模型,具体详细的刨析会在后面的文章 ...

  7. spring中用到的9种设计模式

    spring中用到了9种设计模式,学习spring的源码以及设计模式,可以提高开发人员软件设计以及开发的水平,写出更加优雅的代码. 文章目录 简单工厂(非23种设计模式中的一种) 工厂方法 单例模式 ...

  8. 九种设计模式在Spring中的应用

    Spring中涉及的设计模式总结 1.简单工厂(非23种设计模式中的一种) 实现方式: BeanFactory.Spring中的BeanFactory就是简单工厂模式的体现,根据传入一个唯一的标识来获 ...

  9. 23种设计模式-个人笔记(三)

    目录 行为型模式 12.模板方法模式 12.1.模式的定义与特点 12.2.模式的结构与实现 12.3.模板方法模式的钩子方法 12.4.模板方法模式在Spring框架应用的源码分析 12.5.模板方 ...

  10. 详解spring用到的九种设计模式

    转载请注明出处,文章首发于:http://www.itxxz.com/a/javashili/tuozhan/2014/0601/7.html 设计模式作为工作学习中的枕边书,却时常处于勤说不用的尴尬 ...

最新文章

  1. POJ - 3660 Cow Contest(flod)
  2. 95后女生坚持转数学专业,成功直博双一流!网友:这是高手……
  3. Jenkins 流水线 获取git 分支列表_基于Jenkins的DevOps流水线实践课程
  4. CAS机制中的ABA问题
  5. Python获取局域网内所有机器IP地址与网卡MAC地址
  6. 【绘图】matlab绘制图形
  7. boolean类型默认值_【Java基础】还在问String属于什么数据类型
  8. linux-unit1
  9. java 停止定时器_实例助解java定时器设置及停止的方法
  10. 阿里云徐栋:“下一代互联网”三大技术趋势
  11. ext4文件系统制作 - make_ext4fs 参数介绍【转】
  12. 二叉树的镜像(剑指 Offer 27)
  13. Linux电源管理--PM QoS
  14. 如何检测android手机是否支持3g网络或者4g网络 源码,iOS中怎么判断当前网络环境是2G/3G/4G/5G/WiFi...
  15. Web实时语音/视频聊天/文件传输
  16. 用python绘制圆中圆
  17. python数据预测模型算法_Python机器学习 预测分析核心算法
  18. 计算机/微机组成及相关概念
  19. 超级账本-面向企业的分布式账本
  20. 解决ubuntu软件商店无法安装软件提示snap问题

热门文章

  1. java c 引用类型_C++引用类型详解
  2. asp.net 点击查询跳转到查询结果页面_【免费毕设】ASP.NET交通信息网上查询系统的设计与实现(源代码+论文+开题报告)...
  3. mmlspark-101: TrainClassifier
  4. 自动驾驶 2-1 第 1 课补充阅读:传感器和计算硬件 -- 下
  5. 阿里云云计算 46 阿里云DDoS防护
  6. linux命令行中的大括号,linux命令行学习(19):花括号扩展(brace expansion)
  7. linux安装unity桌面环境,Ubuntu 14.04 server安装桌面环境
  8. java jsonobject 清空_有没有办法,我可以清空整个JSONObject – java
  9. unity3d android自动打包,Unity自动化打包(二)
  10. 梯度下降(一)--机器学习