我们常常会有这样的需求,根据传入参数的不同调用不同的方法,返回不同的值,这个时候大家就会想到使用策略模式,但是使用大量的switch或者if else 代码会很不优雅,下边我来说两个优雅的实现方式
一,枚举
- 首先写一个公共接口,用来定义公共的实现方法
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方法根据传入不同的参数,获取不同的类型枚举来执行对应的方法文章来源:https://www.toymoban.com/news/detail-704506.html
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模板网!