首页 > 其他分享 >Spring Boot 整合工厂设计模式完成服务调用的一种实现

Spring Boot 整合工厂设计模式完成服务调用的一种实现

时间:2024-01-16 21:14:02浏览次数:23  
标签:fruitsMap Spring void Boot class AllFruits eatFruits 设计模式 public

工厂模式是一种创建型设计模式,其主要目的是提供一个创建对象的接口,但将具体类的实例化延迟到子类中。这样,客户端代码就不需要知道要实例化的具体类,只需要知道使用的工厂接口。

项目结构如下

代码实例如下

所有水果都要实现这个接口

public interface AllFruits {
    void eatFruits();
}

实现类如下

public class AppleFruit implements AllFruits {
    @Override
    public void eatFruits() {
        System.out.println("吃苹果");
    }
}
@Service
public class BananaFruit implements AllFruits {
    @Override
    public void eatFruits() {
        System.out.println("吃香蕉");
    }
}
@Service
public class OrangeFruit implements AllFruits {
    @Override
    public void eatFruits() {
        System.out.println("吃橙子");
    }
}
@Service
public class WatermelonFruit implements AllFruits {
    @Override
    public void eatFruits() {
        System.out.println("吃西瓜");
    }
}

然后将实现类存储到一个map中保存以备使用,key记录水果的类型,value为实现类

public class FruitsConfig {
    
    protected static Map<Integer, AllFruits> fruitsMap = new ConcurrentHashMap<>();
    
    @Autowired
    private AppleFruit appleFruit;
    @Autowired
    private BananaFruit bananaFruit;
    @Autowired
    private OrangeFruit orangeFruit;
    @Autowired
    private WatermelonFruit watermelonFruit;
    
    @PostConstruct
    public void init() {
        fruitsMap.put(1, appleFruit);
        fruitsMap.put(2, bananaFruit);
        fruitsMap.put(3, orangeFruit);
        fruitsMap.put(4, watermelonFruit);
    }
}

下面是工厂类

@Service
public class FruitsFactory extends FruitsConfig{

    public AllFruits getFruit(Integer fruitType){
        return fruitsMap.get(fruitType);
    }
}

测试类完成测试,传入一个类型标识即可调用到对应的类

@SpringBootTest
class DemoApplicationTests {
    @Autowired
    private FruitsFactory fruitsFactory;

    @Test
    void testFruits() {
        AllFruits fruit = fruitsFactory.getFruit(1);
        fruit.eatFruits();
    }
}

标签:fruitsMap,Spring,void,Boot,class,AllFruits,eatFruits,设计模式,public
From: https://www.cnblogs.com/zwmBlog/p/17968552

相关文章

  • Spring事务传播机制解析
    确保数据一致性的关键在Java的Spring框架中,事务管理是保证应用数据一致性和可靠性的关键。Spring提供了灵活的事务传播机制,它定义了事务边界,以及在嵌套方法调用时如何处理事务。本文旨在深入探讨Spring的事务传播行为,帮助开发者更好地理解和运用这一重要特性。事务传播机制简介......
  • 实现手机/PC端滑块验证(VUE+Springboot)
    思路a,通过后端,获取到图片,这个图片自己定义,随便是撒。b,通过代码把图片进行随机抠图,扣出一块,形成第二个图,该小图就是为了合并到原有的窟窿中。c,然后把两个图传到后端,保存抠出的图需要移动的距离到redis,作为验证值。d,前端根据图的位置展示底图与小图e,进行移动,完成后进行验证。......
  • Spring IoC 原理剖析
    目录IoC容器系列的设计与实现:BeanFactory和ApplicationContextIOC容器接口设计图BeanFactory容器设计原理编程式使用IOC容器ApplicationContext设计原理AbstractRefreshableApplicationContextIoC容器的初始化创建Bean容器前的准备工作创建Bean容器,加载并注册Bean刷新Bean......
  • springBoot通过AOP(面向切面编程)实现自动保存请求日志
    1.定义注解importjava.lang.annotation.ElementType;importjava.lang.annotation.Retention;importjava.lang.annotation.RetentionPolicy;importjava.lang.annotation.Target;@Target(ElementType.METHOD)//指定该注解只能应用于方法上@Retention(RetentionPolicy.......
  • Elastic实战:彻底解决spring-data-elasticsearch日期、时间类型数据读取报错问题
    0.引言在使用spring-data-elasticsearch读取es中时间类型的数据时出现了日期转换报错,不少初学者会在这里困惑很久,所以今天我们专门来解读该问题的几种解决方案。1.问题分析该问题的报错形式一般是:Failedtoconvertfromtype[java.lang.String]totype[java.util.Date]f......
  • Spring Boot3.x集成ElasticSearch8.x
    SpringBoot3.x集成ElasticSearch8.x版本说明,本demo使用SpringBoot3.2.1+JDK17+ElasticSearch8.11.3前提是已经部署好了自己的ElasticSearch环境,我这里直接用容器默认部署好了,能访问即可创建SpringBoot项目导入pom依赖<dependency><grou......
  • 学无止境--U-boot下的ETH PHY驱动探索
    备注:学习记录所用,若有高手不吝赐教,万分感谢!一、概括环境:cpu:fsl91030mphy:yt8512(motorcomm厂)完整的phy驱动需要ethphy驱动、mdio驱动、mii驱动(一般ic原厂自带),并且需要将其嵌入到eth驱动中。 二、外部phy驱动1、驱动位置drivers/net/phy中添加motorcomm.c文件2、驱动实现......
  • Spring事务传播机制
    1.Spring对事物的支持一般有两种方式编程式事务管理:通过 TransactionTemplate或者TransactionManager手动管理事务,实际应用中很少使用,这不是本文的重点,就不在这里赘述。声明式事务管理:使用场景最多,也是最推荐使用的方式,直接加上@Transactional注解即可。2.Transactional注......
  • springboot~shardingsphere在非spring框架中的使用
    shardingsphere已经很方便的被springboot集成了,你只要引入sharding-jdbc-spring-boot-starter这个包就可以了,而如果是原生java的话,你就需要自己去实现了,主要是重新定义数据源,定义规则等问题,本文主要介绍原生环境下的shardingsphere的使用。依赖引用<dependencies><!--......
  • [spring] spring学习笔记(2): 通过xml实现依赖注入 - 特殊注入类型
    实际应用中,我们的对象可能会引用很多不同类型的东西,不单单只是几个数值对象类型在前一篇文章中,已经使用引用对象作为例子,关键在于使用ref<!--注意引用的对象要先创建Bean,id为weapon1--><beanid="player1"class="com.demo.player"> <!--通过setter注入,注意ref的......