本文主要是介绍CTO是如何写代码的,对扩展开放,对修改封闭原则 开发封闭原则,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
父类
public abstract class GeneralChannelRule {public abstract void process();
}
枚举类,只需要增加
import javax.print.attribute.standard.Sides;public enum ChannelRuleEnum {/*** 头条*/TOUTIAO("TOUTIAO",new TouTiaoChannelRule()),/*** 腾讯*/TENCENT("TENCENT",new TencentChannelRule());public String name;public GeneralChannelRule channel;ChannelRuleEnum(String name, GeneralChannelRule channel) {this.name = name;this.channel = channel;}public String getName() {return name;}public GeneralChannelRule getChannel() {return channel;}public static ChannelRuleEnum match(String name){ChannelRuleEnum[] values = ChannelRuleEnum.values();for (ChannelRuleEnum value:values) {if(value.name.equals(name)){return value;}}return null;}
}
实现父类
public class TencentChannelRule extends GeneralChannelRule {@Overridepublic void process() {// TODO Auto-generated method stubSystem.out.println("ten腾讯企鹅");}}
实现父类
public class TouTiaoChannelRule extends GeneralChannelRule {@Overridepublic void process() {// TODO Auto-generated method stubSystem.out.println("今日头条");}}
public class Test {public static void main(String[] args) {String sign ="TENCENT";ChannelRuleEnum channelRuleEnum = ChannelRuleEnum.match(sign);GeneralChannelRule rule =channelRuleEnum.channel;rule.process();}
}
解析:通过使用枚举类,在枚举中将 key 与 规则具体实现进行绑定。通过改变:
可以减少if -else使得代码更加优雅 如果需要新增渠道,我们只需要在编写具体规则实现类并继承GeneralChannelRule抽象类,并在枚举类中新增的枚举,而不需要改动到原先的任何代码。这符合了开发封闭原则。
最后
以上是通过枚举来巧妙干掉if-else的方案,对于减少 if-else 还有很多有趣的解决方案(如:状态设计模式等),感兴趣的朋友去查阅相关的资料。
这篇关于CTO是如何写代码的,对扩展开放,对修改封闭原则 开发封闭原则的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!