CTO编写的代码绝对是惊人的!

场景:当我们收到一些数据并需要处理时,由于它们来自不同的渠道(例如腾讯,头条),因此不同的渠道需要不同的处理方法。

让我们编写一个简单的Demo来实现这种情况。

解决方案1.首先,构造GeneralChannelRule基本规则的抽象类,并定义抽象方法process()。

不同的渠道需要实现此抽象方法。

公共抽象类GeneralChannelRule {公共抽象无效process();} 2.编写腾讯规则类并为腾讯渠道数据定义特定的处理逻辑公共类TencentChannelRule扩展了GeneralChannelRule @Override public void process(){腾讯处理逻辑} 3.编写一个标题规则类并为标题数据定义特定的处理逻辑公共类TouTiaoChannelRule扩展了GeneralChannelRule public void process(){TouTiao处理逻辑// TouTiao处理逻辑}}}创建一个简单的ChannelRule枚举publicEnum {/ ** Headline * / TOUTIAO(“ ;“ TOUTIAO”,TENCENT(“ TENCENT”),TENCENT(“ TENCENT”)5.使用规则来处理数据。

public static void main(String [] args){//在这里,我们模拟接收到的数据,频道为TOUTIAO,标题中的数据为String sign =“ TOUTIAO”; GeneralChannelRule规则;如果(ChannelRuleEnum.TENCENT.code.equals(sign)){rule = new TencentChannelRule();},则根据相应的通道规则实现类型获取相应的通道;否则,如果(ChannelRuleEnum.TOUTIAO.code.equals(sign)){ChannelRuleEnum .TOUTIAO.code.equals(sign)){ChannelRuleEnum.TOUTIAO.code.equals(sign)){ChannelRuleEnum。

//无法匹配}}}}}} –执行rule.process();}分析:如果采用上述方法,则有两个缺点。

当我们需要添加新通道时,我们需要修改main方法中的逻辑。

这违反了设计模式中的开放规则和封闭规则。

开放和封闭原则的核心思想是软件实体可以扩展而不能修改。

换句话说,展开是打开的,但修改是关闭的。

添加通道后,修改代码会生成很多其他情况,这不是很优雅。

为了解决以上两个问题,我们可以使用枚举类进行巧妙的优化。

新思路1.让我们调整枚举类,添加GeneralChannelRule属性,并为相应的通道构建相应的GeneralChannelRule实现类,并添加match()匹配方法。

public Enum ChannelRuleEnum {标题TOUTIAO(“ TOUTIAO”,新的TouTiaoChannelRule()),ToutiaoChannelRuleEnum; TouTiao(“ TOUTIAO”,新的TouTiaoChannelRule());腾讯频道;腾讯频道; CENTnew Channel,CENTnew Channel,CENTnew Channel,CENTER Channel,CENTnew Channel,CENTule; ChannelRuleEnum(String name,GeneralChannelRule channel){this.name = name; this.channel = channel;} //匹配num(公共ChannelRuleEnum(用于Channelname的字符串)值ChannelRuleEnum(用于ChannelEnum的字符串)value ChannelRuleEnum(用于Channelname的字符串)[value]:values){if(value.name.equals(name) ){返回值;}}返回null;} public String getName(){return name;} public GeneralChannelRule getChannel(){return channel;}} 2,重写程序public static void main(String [] args){String sign = “ TOUTIAO”; ChannelRuleEnum ChannelRule = ChannelRuleEnum.match(sign); ChannelRule channel = channelRule.process; ign);}分析:通过使用枚举类,键被绑定到枚举中规则的特定实现。

通过更改:可以减少if-else以使代码更优雅。

如果需要添加通道,我们只需要编写特定的规则实现类并继承GeneralChannelRule抽象类,并在枚举类中添加新的枚举即可,而无需更改为任何原始代码。

这符合开发封闭原则。

最后,以上是通过枚举巧妙地杀死if-else的解决方案。

有许多有趣的解决方案可以减少if-else(例如:状态设计模式等)。

如果您有兴趣,请检查相关信息。

资料来源:www.toutiao.com/i6847406631983153672作者:Poly IT

联系方式

AEC-Q200汽车级组件符合汽车工业标准。耐硫厚膜、精密薄膜、电流传感、电阻阵列、MELF电阻等系列产品可用于汽车照明、媒体、电力系统、仪表等领域。

查看详情

在线咨询