策略模式的应用

在MES系统开发中,为实现不同车辆品牌生成定制化VIN号,避免使用if...else...,采用了策略模式进行优化。通过定义VinProduct接口,创建针对A和B品牌的实现类,并从配置文件动态加载实现。当需要新增如C品牌时,只需扩展新的实现类并配置,即可灵活调用相应Vin号生成策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

         在做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);//拿到策略类接口
	//生成VIN
	String string=product.getVin();
    return string;
}

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





评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值