开闭原则定义
开闭原则,英文是Open Closed Principle,缩写就是OCP,指的就是一个软件实体如:类、模块应该对扩展开放,对修改关闭。
通俗解释就是,添加一个新的功能,应该通过在已有代码(模块、类、方法)的基础上进行扩展来实现,而不是修改已有代码。
开闭原则角色
开闭原则:这里的开闭分为:开放和关闭两个角色来讲。
1.对扩展开放
指的是我们系统中的模块、类、方法对它们的提供者(开发者)应该是开放的,提供者可以对系统进行扩展(新增)新的功能。
2.对修改关闭
指的是系统中的模块、类、方法对它们的使用者(调用者)应该是关闭的,使用者使用这些功能时,不会因为提供方新增了功能而导致使用者也进行相应修改。
因为日常需求是不断迭代更新的,所以我们经常需要在原来的代码中修改,如果代码设计得不好扩展性不强,每次都要在原来代码中修改,很可能会引入bug。
因此,我们的代码应该遵循开闭原则,也就是对扩展开放,对修改关闭。
开闭原则案例
下面让我通过一个简单的小案例,来加深一下对“开闭原则”的理解。
假设有这样的业务场景:根据不同的类型,采取不同的方式处理数据。
多数的小伙伴就会写出以下的代码:
这段代码如果后续还需修改,会面临2个主要的问题:
- 如果分支变多,这里的代码就会变得臃肿,难以维护;
- 如果你需要接入一种新的解析类型,那只能在原有代码上修改;
如果增加、删除某个类型,都需要修改到原来类的代码,这就违反了开闭原则了,为了解决这个问题,我们可以使用策略模式去优化它。
优化后的代码如下:
1.定义通用接口
2.然后实现不同策略的解析类
如果未来需求变更的话,比如增加、删除某个逻辑,不会再修改到原来的类啦,只需要修改对应的文件解析类型的类即可。
作者简介
陈睿|mikechen,10年+大厂架构经验,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注作者「mikechen」公众号,获取更多技术干货!
后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》,后台回复【面试】即可获取《史上最全阿里Java面试题总结》