一、需求
根据不同勋章类型,处理相对应的勋章服务
二、优化前代码
String medalType = "guest";
if ("guest".equals(medalType)) {
System.out.println("嘉宾勋章");
} else if ("vip".equals(medalType)) {
System.out.println("会员勋章");
} else if ("guard".equals(medalType)) {
System.out.println("展示守护勋章");
}
...
三、优化后代码
3.1、公共的接口
package com.chenheng.service;
/**
* @author chenheng
* @date 2022/3/20 15:37
*/
public interface IMedalService {
/**
* 展示勋章
*/
void showMedal();
}
3.2、策略实现类
package com.chenheng.service.impl;
import com.chenheng.service.IMedalService;
/**
* @author chenheng
* @date 2022/3/20 15:38
* 守护勋章策略实现类
*/
public class GuardMedalServiceImpl implements IMedalService {
@Override
public void showMedal() {
System.out.println("展示守护勋章");
}
}
package com.chenheng.service.impl;
import com.chenheng.service.IMedalService;
/**
* @author chenheng
* @date 2022/3/20 15:39
* 嘉宾勋章策略实现类
*/
public class GuestMedalServiceImpl implements IMedalService {
@Override
public void showMedal() {
System.out.println("嘉宾勋章");
}
}
package com.chenheng.service.impl;
import com.chenheng.service.IMedalService;
/**
* @author chenheng
* @date 2022/3/20 15:40
* VIP勋章策略实现类
*/
public class VipMedalServiceImpl implements IMedalService {
@Override
public void showMedal() {
System.out.println("会员勋章");
}
}
3.3、策略工厂类
package com.chenheng.factory;
import com.chenheng.service.IMedalService;
import com.chenheng.service.impl.GuardMedalServiceImpl;
import com.chenheng.service.impl.GuestMedalServiceImpl;
import com.chenheng.service.impl.VipMedalServiceImpl;
import java.util.HashMap;
import java.util.Map;
/**
* @author chenheng
* @date 2022/3/20 15:42
* 勋章服务工厂类
*/
public class MedalServicesFactory {
private static final Map<String, IMedalService> map = new HashMap<>();
static {
map.put("guard", new GuardMedalServiceImpl());
map.put("guest", new GuestMedalServiceImpl());
map.put("vip", new VipMedalServiceImpl());
}
public static IMedalService getMedalService(String medalType){
return map.get(medalType);
}
}
3.4、策略+工厂
package com.chenheng;
import com.chenheng.factory.MedalServicesFactory;
import com.chenheng.service.IMedalService;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
/**
* @author chenheng
* @date 2022/3/20 15:55
*/
@SpringBootTest
public class TodayTest {
@Test
void testMedalServicesFactory(){
String medalType = "guest";
IMedalService medalService = MedalServicesFactory.getMedalService(medalType);
medalService.showMedal();
}
}
四、参考文献
1、if-else代码优化的八种方案
2、6个实例详解如何把if-else代码重构成高质量代码
3、如何 “干掉” if…else