开闭原则详解(定义作用及应用案例)

开闭原则详解(定义作用及应用案例)-mikechen

开闭原则定义

开闭原则,英文是Open Closed Principle,缩写就是OCP,指的就是一个软件实体如:类、模块应该对扩展开放,对修改关闭。

通俗解释就是,添加一个新的功能,应该通过在已有代码(模块、类、方法)的基础上进行扩展来实现,而不是修改已有代码。

 

开闭原则角色

开闭原则:这里的开闭分为:开放和关闭两个角色来讲。

开闭原则详解(定义作用及应用案例)-mikechen

1.对扩展开放

指的是我们系统中的模块、类、方法对它们的提供者(开发者)应该是开放的,提供者可以对系统进行扩展(新增)新的功能。

 

2.对修改关闭

指的是系统中的模块、类、方法对它们的使用者(调用者)应该是关闭的,使用者使用这些功能时,不会因为提供方新增了功能而导致使用者也进行相应修改。

因为日常需求是不断迭代更新的,所以我们经常需要在原来的代码中修改,如果代码设计得不好扩展性不强,每次都要在原来代码中修改,很可能会引入bug。

因此,我们的代码应该遵循开闭原则,也就是对扩展开放,对修改关闭。

 

开闭原则案例

下面让我通过一个简单的小案例,来加深一下对“开闭原则”的理解。

假设有这样的业务场景:根据不同的类型,采取不同的方式处理数据。

多数的小伙伴就会写出以下的代码:

开闭原则详解(定义作用及应用案例)-mikechen

这段代码如果后续还需修改,会面临2个主要的问题:

  1. 如果分支变多,这里的代码就会变得臃肿,难以维护;
  2. 如果你需要接入一种新的解析类型,那只能在原有代码上修改;

如果增加、删除某个类型,都需要修改到原来类的代码,这就违反了开闭原则了,为了解决这个问题,我们可以使用策略模式去优化它。

优化后的代码如下:

1.定义通用接口

开闭原则详解(定义作用及应用案例)-mikechen

2.然后实现不同策略的解析类

开闭原则详解(定义作用及应用案例)-mikechen

如果未来需求变更的话,比如增加、删除某个逻辑,不会再修改到原来的类啦,只需要修改对应的文件解析类型的类即可。

作者简介

陈睿|mikechen,10年+大厂架构经验,BAT资深面试官,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

👇阅读更多mikechen架构文章👇

阿里架构 |双11秒杀 |分布式架构 |负载均衡 |单点登录 |微服务 |云原生 |高并发 |架构师

以上

关注作者「mikechen」公众号,获取更多技术干货!

后台回复架构,即可获取《阿里架构师进阶专题全部合集》,后台回复面试即可获取《史上最全阿里Java面试题总结

评论交流
    说说你的看法