我们平时在开发的过程中,肯定会大量的出现if else这种类型的代码,随着业务量的上升,if else代码格式过于复杂,导致代码可读性降低,今天,小编就带大家来利用设计模式之策略和工厂模式来优化if else代码,代码如下所示:
if(a){
//dosomething
}else if(b){
//doshomething
}else if(c){
//doshomething
} else{
doshomething
}
策略模式
首先,利用策略模式来优化doSomething。
第一步、创建策略接口类。
public interface IMedalService {
void showMedal();
}
第二步、根据不同的逻辑去实现策略。
public class GuestMedalServiceImpl implements IMedalService {
@Override
public void showMedal() {
System.out.println("嘉宾勋章");
}
}
public class VipMedalServiceImpl implements IMedalService {
@Override
public void showMedal() {
System.out.println("会员勋章");
}
}
工厂模式
其次,利用工厂模式集中创建实现所需要的策略对象。此处,是通过map来实现不同的策略对象的创建,与此同时,创建工厂类时,需要向外部提供一个可以供外部调用的方法,即:getMedalService()方法。
public class MedalServicesFactory {
private static final Map<String,IMedalService> map=new HashMap<>();
static {
map.put("guard", new GuardMedalServiceImpl());
map.put("vip", new VipMedalServiceImpl());
map.put("guest", new GuestMedalServiceImpl());
}
public static IMedalService getMedalService(String medalType){
return map.get(medalType);
}
}
实际应用
public class Test {
public static void main(String[] args) {
String medalType="guest";
IMedalService medalService = MedalServicesFactory.getMedalService(medalType);
medalService.showMedal();
}
}
通过工厂类中的getMedalService方法来实现了不同逻辑策略的调用,从而有效地提升了代码的整洁度,也方便了开发人员去根据不同的策略逻辑,去实现IMedalService接口。