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


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

    一,枚举

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

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

            

    1. public enum Type implements Contant{
    2. CAT(){
    3. @Override
    4. public String getType(String cat) {
    5. return "cat";
    6. }
    7. },
    8. DOG(){
    9. @Override
    10. public String getType(String cat) {
    11. return "DOG";
    12. }
    13. }
    14. }

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

    1. public class Test {
    2. public static void main(String[] args) {
    3. Type cat = Type.valueOf("DOG");
    4. String cat1 = cat.getType("cat");
    5. System.out.println(cat1);
    6. }
    7. }

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

    1. public interface PerSon {
    2. String getName(String name);
    3. }
    1. package com.juc.test;
    2. import org.springframework.beans.factory.InitializingBean;
    3. import org.springframework.stereotype.Service;
    4. @Service
    5. public class Student implements PerSon, InitializingBean {
    6. @Override
    7. public String getName(String name) {
    8. System.out.println("获取名字中");
    9. return name;
    10. }
    11. /**
    12. * 该方法在bean初始化的时候就会被调用
    13. * @throws Exception
    14. */
    15. @Override
    16. public void afterPropertiesSet() throws Exception {
    17. Factory.register("xuesheng",this);
    18. }
    19. }
    1. package com.juc.test;
    2. import java.util.Map;
    3. import java.util.concurrent.ConcurrentHashMap;
    4. public class Factory {
    5. private static final Map map=new ConcurrentHashMap<>();
    6. public static PerSon getByName(String name){
    7. return map.get(name);
    8. }
    9. public static void register(String name,PerSon perSon){
    10. map.put(name,perSon);
    11. }
    12. }

    使用如下:

    1. public static void main{
    2. Person person=Factory.getByName("xuesheng");
    3. String name=person.getName("Enty");
    4. }

  • 相关阅读:
    算法 java 排序和查找
    xhadmin多应用Saas框架源码怎么下载?
    《自然语言处理实战入门》 基于知识图谱的问答机器人
    二十、W5100S/W5500+RP2040树莓派Pico<MQTT连接阿里云控制板载LED>
    代码随想录一一一数组一一一移除元素
    Ubantu opencv安装
    【情态动词练习题】Can I / We ... ?
    在CentOS 7上关闭SELinux
    2-1.spring源码--Container
    防御DDOS的方法是什么?
  • 原文地址:https://blog.csdn.net/weixin_59244784/article/details/132788989