首页 > 其他分享 >Spring 用了哪些设计模式?说三种即可

Spring 用了哪些设计模式?说三种即可

时间:2023-03-18 21:35:12浏览次数:53  
标签:逻辑 Spring Builder 模式 实例 三种 设计模式 方法 support

  • 策略模式
  • 工厂方法模式
  • Builder模式

策略模式

策略模式就是一个接口下有多个实现类,而每种实现类会处理某一种情况。

比如我们在抽奖系统中,有多种奖励方式可供选择,比如积分,虚拟币和现金等。在存储时,我们必然会使用一个类似于type的字段用于表征这几种发放奖励的,那么这里我们就可以使用多态的方式进行奖励的发放。比如我们抽象出一个PrizeSender的接口,该接口中主要有两个方法:support()和sendPrize(),其中support()方法主要用于判断各个子类是否支持当前类型数据的处理,而sendPrize()则主要是用于进行具体的业务处理的,比如这里奖励的发放。在每种子类型中,我们只需要在support()方法中通过request的某个参数来控制当前request是否是当前实例能够处理的类型,如果是,则外层的控制逻辑就会将request交给当前实例进行处理。关于这个类的设计,有几个点需要注意:

  • 使用@Component注解对当前类进行标注,将其声明为Spring容器所管理的一个bean;
  • 声明一个返回boolean值的类似于support()的方法,通过这个方法来控制当前实例是否为处理目标request的实例;
  • 声明一个类似于sendPrize()的方法用于处理业务逻辑,当然根据各个业务的不同声明的方法名肯定是不同的,这里只是一个对统一的业务处理的抽象;
  • 无论是support()方法还是sendPrize()方法,都需要传一个对象进行,而不是简简单单的基本类型的变量,这样做的好处是后续如果要在Request中新增字段,那么就不需要修改接口的定义和已经实现的各个子类的逻辑;

工厂方法模式

所谓的工厂方法模式,就是定义一个工厂方法,通过传入的参数,返回某个实例,然后通过该实例来处理后续的业务逻辑。一般的,工厂方法的返回值类型是一个接口类型,而选择具体子类实例的逻辑则封装到了工厂方法中了。通过这种方式,来将外层调用逻辑与具体的子类的获取逻辑进行分离。

Builder模式

Builder模式就其名称而言,是一个构建者,我更倾向于将其理解为通过一定的参数,通过一定的业务逻辑来最终生成某个对象。

  • 在Builder.build()方法中,我们可以通过传入的参数和注入的bean来进行一定的业务处理
  • Builder类必须使用static修饰,因为在Java中,如果内部类不用static修饰,那么该类的实例必须依赖于外部类的一个实例,而我们这里本质上是希望通过内部类实例来构建外部类实例,也就是说内部类实例存在的时候,外部类实例是还不存在的,因而这里必须使用static修饰;

 

参考:

 

标签:逻辑,Spring,Builder,模式,实例,三种,设计模式,方法,support
From: https://www.cnblogs.com/xfeiyun/p/17231712.html

相关文章

  • spring
    1 从容器中拿对象:getBean(Class):按照类型拿bean;getBean(String):按照名字拿bean;getBean(String,Class):按照名字和类型拿;(推荐)2DI依赖注入 3 spring加载过......
  • Spring Study -lesson12 -AOP(一)-2023-03-18
    AOP方法一:通过SpringAPI接口实现<beanid="userService"class="com.feijian.service.UserServiceImpl"/><beanid="log"class="com.feijian.log.Log"/>......
  • SpringCloud-搭建eurekaServer
    Eureka介绍整体介绍背景:在传统应用中,组件之间的调用,通过有规范的约束的接口来实现,从而实现不同模块间良好的协作。但是被拆分成微服务后,每个微服务实例的网络地址都可......
  • Spring Bean的五个作用域
    ​ Spring支持五个作用域:singleton、prototype、request、session、globalsession1.singleton:默认作用域SpringIOC容器仅存在一个Bean实例,Bean以单例方式存在,在创建容......
  • Spring Bean的五个作用域
    ​ Spring支持五个作用域:singleton、prototype、request、session、globalsession1.singleton:默认作用域SpringIOC容器仅存在一个Bean实例,Bean以单例方式存在,在创建容......
  • Spring框架中使用了哪些设计模式及应用场景
    1、工厂模式在各种BeanFactory以及ApplicationContext创建中都有用到2、模板模式在各种BeanFactory以及ApplicationContext创建中都有用到3、代理模式SpringAOP......
  • Spring Bean的五个作用域
     Spring支持五个作用域:singleton、prototype、request、session、globalsession1.singleton:默认作用域SpringIOC容器仅存在一个Bean实例,Bean以​​单例​​方式存在,在创......
  • Spring Bean的五个作用域
     Spring支持五个作用域:singleton、prototype、request、session、globalsession1.singleton:默认作用域SpringIOC容器仅存在一个Bean实例,Bean以​​单例​​方式存在,在创......
  • Java 中 栈结构的三种使用方式 最后一种效率最高
     1.最不推荐LinkedList<Integer>stack1=newLinkedList<>();stack1.addLast(1);stack1.addLast(2);stack1.addLast(3);while(!stack1.isEmpty()){System.out.......
  • IDEA社区版找不到SpringAssistant插件下载的解决办法
    进入JetBrains的官方网站搜索插件网址如下https://plugins.jetbrains.com/plugin/10229-spring-assistant/versions/stable打开IntelliJ文件夹,将下载所得内容解压缩到如下......