假設(shè)需求為殴蓬,根據(jù)不同勛章類型立润,處理相對應(yīng)的勛章服務(wù)狂窑,優(yōu)化前有以下代碼:
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("展示守護(hù)勛章");
}
...
首先,我們把每個條件邏輯代碼塊范删,抽象成一個公共的接口蕾域,可以得出以下代碼:
//勛章接口
public interface IMedalService {
void showMedal();
}
我們根據(jù)每個邏輯條件,定義相對應(yīng)的策略實現(xiàn)類到旦,可得以下代碼:
//守護(hù)勛章策略實現(xiàn)類
public class GuardMedalServiceImpl implements IMedalService {
@Override
public void showMedal() {
System.out.println("展示守護(hù)勛章");
}
}
//嘉賓勛章策略實現(xiàn)類
public class GuestMedalServiceImpl implements IMedalService {
@Override
public void showMedal() {
System.out.println("嘉賓勛章");
}
}
//VIP勛章策略實現(xiàn)類
public class VipMedalServiceImpl implements IMedalService {
@Override
public void showMedal() {
System.out.println("會員勛章");
}
}
接下來,我們再定義策略工廠類巨缘,用來管理這些勛章實現(xiàn)策略類添忘,如下:
//勛章服務(wù)工產(chǎn)類
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();
}
}