我们常常会有这样的需求,根据传入参数的不同调用不同的方法,返回不同的值,这个时候大家就会想到使用策略模式,但是使用大量的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方法根据传入不同的参数,获取不同的类型枚举来执行对应的方法
- public class Test {
-
-
- public static void main(String[] args) {
- Type cat = Type.valueOf("DOG");
- String cat1 = cat.getType("cat");
- System.out.println(cat1);
-
- }
- }
- 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
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);
- }
- }
使用如下:
- public static void main{
-
- Person person=Factory.getByName("xuesheng");
- String name=person.getName("Enty");
-
-
- }