使用枚举 代替简单工厂的switch或者if else

这篇具有很好参考价值的文章主要介绍了使用枚举 代替简单工厂的switch或者if else。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

我们常常会有这样的需求,根据传入参数的不同调用不同的方法,返回不同的值,这个时候大家就会想到使用策略模式,但是使用大量的switch或者if else 代码会很不优雅,下边我来说两个优雅的实现方式

一,枚举

  1. 首先写一个公共接口,用来定义公共的实现方法
    public interface Contant {
    
        String   getType(String  cat);
    }
    

    2.写一个枚举用来定义不同类型的实现

        

public enum Type implements Contant{

    CAT(){
        @Override
        public String getType(String cat) {
            return "cat";
        }
    },
    DOG(){
        @Override
        public String getType(String cat) {
            return "DOG";
        }
    }
}

3.使用枚举类的valueof方法根据传入不同的参数,获取不同的类型枚举来执行对应的方法

public class Test {


    public static void main(String[] args) {
        Type cat = Type.valueOf("DOG");
        String cat1 = cat.getType("cat");
        System.out.println(cat1);

    }
}

二,map--主要是通过实现InitializingBean接口,该接口的afterPropertiesSet可以在bean初始化的时候调用,然后在这个方法中我们将当前实例注册到map中,供给需求使用

public interface PerSon {

    String   getName(String name);
}
package com.juc.test;

import org.springframework.beans.factory.InitializingBean;
import org.springframework.stereotype.Service;

@Service
public class Student implements PerSon, InitializingBean {
    @Override
    public String getName(String name) {
        System.out.println("获取名字中");
        return name;
    }

    /**
     * 该方法在bean初始化的时候就会被调用
     * @throws Exception
     */
    @Override
    public void afterPropertiesSet() throws Exception {
        Factory.register("xuesheng",this);
    }
}
package com.juc.test;

import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

public class Factory {

    private static final Map<String,PerSon> map=new ConcurrentHashMap<>();

    public static PerSon  getByName(String name){
      return   map.get(name);
    }

    public static void register(String name,PerSon perSon){
         map.put(name,perSon);
    }
}

使用如下:文章来源地址https://www.toymoban.com/news/detail-704506.html

public static void main{

Person person=Factory.getByName("xuesheng");
String name=person.getName("Enty");


}

到了这里,关于使用枚举 代替简单工厂的switch或者if else的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【C语言步行梯】分支语句if...else、switch详谈

    🎯每日努力一点点,技术进步看得见 🏠专栏介绍:【C语言步行梯】专栏用于介绍C语言相关内容,每篇文章将通过图片+代码片段+网络相关题目的方式编写,欢迎订阅~~ C语言由 ; (分号)隔开的就是一条语句,举个例子↓↓↓ 生活中,我们有很多需要选择的情况。例如:你想

    2024年03月16日
    浏览(60)
  • Java中使用工厂模式和策略模式优雅消除if-else语句(UML类图+案例分析)

     前言:在最近的后端开发中,多多少少会发现有很多if-else语句,如果条件过多则会造成整体代码看起来非常臃肿,这边我就举一个我在实际开发中的例子,来进行阐述这两种模式在实际开发中我是如何运用的。 目录 一、工厂模式简介 二、简单工厂模式 2.1、UML类图

    2024年02月15日
    浏览(32)
  • C 知识积累 替换gets函数 Linux C 语法分析 switch和if else的比较

    gets()用处 gets从标准输入设备读字符串函数,其可以无限读取,不会判断上限,可以包含空格,以回车结束读取。 gets()的危险之处 因为该函数可以无限读取,所以应该确保buffer的空间足够大,以便在执行读操作时不发生溢出。如果溢出,多出来的字符将被写入到堆栈中,这就

    2024年02月16日
    浏览(52)
  • 【算法笔记】求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。

    求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等及条件判断语句(A?B:C)、位运算、递归、公式、sizeof。 习题链接:题目链接 该题把我们的所有能用的方法都给限制死了,我们只能用一些的特殊的方法来做。不知道大家在思考的过程中考没考虑过

    2024年02月07日
    浏览(59)
  • springboot工厂模式解决if_else流程和问题点解决

    spring中的Bean由IOC容器进行管理,和普通工厂的区别就是springboot中的类不能通过自己New出来使用,如果通过new写入到工厂,涉及到相关实现类调用其他Service(该service在正确情况下正常注入),注入的Service也会报错异常Null,也就是工厂注入失败。 工厂中的相关Bean也通过Spring

    2023年04月09日
    浏览(65)
  • Optional的使用(代替if判断是否为空)

    我的使用 雨泽的使用 结果: 这里不知道他有没有走map方法。 但是通过看源码可以知道。其实他是走了map方法的,但是为什么没有抛出空指针异常呢?你null.map()了。 因为他内部把null转换了一下,你Optional.ofNullable(sysUser)返回值不是null了。所以调用map方法不会出现空指针异常

    2024年01月25日
    浏览(50)
  • mybatis使用xml中的if-else/choose

    最近需要使用 xml 文件来实现一些增删改查,此文对 其中的 if-else 加以说明 背景: 有一个引用类,假设叫 Student 现在我们查询条件也被封装成一个引用类,例如: 那么使用 xml 怎么来使用和接收呢? 首先肯定是在 mapper 里面有一个方法 然后在 xml 文件中写这个方法的具体实

    2024年04月23日
    浏览(36)
  • C++中使用 if…else 有条件地执行多条语句

    如果要在满足(或不满足)条件时执行多条语句,需要将它们组合成一个语句块。包含在大括号({})内的多条语句被视为语句块,例如: 这样的语句块也被称为复合语句。 写在花括号{}中的内容组成的语句,就是复合语句。特别的,如果你只写了一个花括号,里面什么内容

    2024年02月10日
    浏览(37)
  • 「Java基础入门」Java中switch怎么使用枚举

    在Java开发中,switch语句是一种常用的流控制语句,用于根据不同的条件执行不同的代码块。而当使用枚举类型作为条件时,我们常常会遇到“Constant expression required”的报错问题,这给程序开发造成了不小的困扰。 switch 语句中的变量类型可以是: byte、short、int 或者 char。从

    2024年02月16日
    浏览(31)
  • java jdk8 switch case中无法使用枚举问题解决

    之前常规写法: 代码会报错: 此时在枚举中添加方法: 代码中改为: idea自编译不报错, 经测试也可以用 枚举完整代码: 参考: 「Java基础入门」Java中switch怎么使用枚举 - 掘金

    2024年04月25日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包