策略模式的应用

来源:互联网 发布:收购淘宝卖家账号 编辑:程序博客网 时间:2024/06/05 18:17

         在做mes系统的时候,有个需求是根据车辆品牌生成不同规则的VIN号,也就是每一辆车的身份证号,相当于ID。

目前是只有两个品牌,为了扩展性和灵活性避免很多的if...else...。可以采用策略模式进行优化。

        原来这样实现:

public String getVin(String brand){ if(brand.equals("A")){//生成A品牌的VIN号}else if(brand.equals("B"){//生成B品牌的VIN号,规则和A不同}//...//...}

     现在可以这样实现:

先定义一个接口VinProduct:

public interface VinProduct{public String getVin();}
定义两个类实现该接口,分别生成各自规则的Vin号:

public class AVinImpl implements VinProduct{public String getVin(){//生成A品牌的VIN号}}public class BVinImpl implements VinProduct{public String getVin(){//生成B品牌的VIN号}}

配置对应的 properties:

A=com.mes.product.AVinImpl

B=com.mes.product.BVinImpl

读取properties文件,讲key和value放入map中:

Map<String,Object> map =new HashMap<>();map.put("A", AVinImpl);        map.put("B", BVinImpl);<span style="font-family: Arial, Helvetica, sans-serif;"></span>

然后就可以这样实现:
public String getVin(String brand){ (VinProduct) product=(VinProduct)map.get(brand);//拿到策略类接口//生成VINString string=product.getVin();    return string;}

假如现在增加C品牌的车辆生成Vin号的规则也不同,那么只需要增加一个类实现VinProdcut接口,然后实现自己的生成Vin的方法,然后进行配置,就可以通过传不同的参数,反射不同的实现类,进行各自不同的生成Vin号的方法了。





0 0