关于
在工作中遇到数据类型不同,需要采用不同的方式处理,常见的写法是根据条件进行判断,采用 if…else… 或者 switch 的方式
比如我最近在写的工单,不同类型工单需要的数据和处理逻辑各有区别
由于工单类型比较多,想到要写一堆 if…else…我就头大,这样的代码太丑,我不喜欢…
略一思考,用策略模式去实现,就清爽很多
步骤
首先我们需要定义一个接口,定义一个方法,然后由各个类型工单的具体处理类去实现,代码:
1 2 3 4
| public interface OrderHandler{ public void handle(Order order); }
|
然后根据工单类型去写出各自相应的实现类,比如加油工单、洗车工单
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| public class JiayouOrderHandler implements OrderHandler{
@Override public void handle(Order order){ System.out.println("去加油"); }
}
public class CleanOrderHandler implements OrderHandler{
@Override public void handle(Order order){ System.out.println("去洗车"); }
}
|
然后需要根据不同工单类型定义好枚举,将工单类型和实际的操作类去做一个绑定
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| public enum OrderTypeEnum{
JIAYOU("JIAYOU",new JiayouOrderHandler()), XICHE("XICHE",new CleanOrderHandler()), ;
public String type;
public OrderHandler handler;
OrderTypeEnum(String type, OrderHandler handler) { this.type = type; this.handler = handler; }
public static OrderHandler getHandler(String type){ OrderTypeEnum[] values = OrderTypeEnum.values(); for (OrderTypeEnum value : values) { if(type.equals(value.type))){ return value.handler; } } return null; }
public String getType() { return type; }
public OrderHandler getHandler() { return handler; }
}
|
然后调用的地方
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| public static void main(String[] args){
Order order = new Order(); order.type = "JIAYOU"; OrderHandler handler = OrderTypeEnum.getHandler(order.getType()); if(null == handler){ System.out.println("不支持的工单类型"); return ; } handler.handle(order);
}
|
没有一堆的 if…else…,真开心!