开闭原则,来自生活与编程等各方面的例子


勇哥注:

这节勇哥拿开闭原则,发散思考一下。。。。


先提一下面向对向编程中开闭原则的概念:

软件实体(类、模块、函数等)应该可以扩展,但是不可以修改。



弹性工作时间制度

在弹性工作时间制度中,规定每天工作8小时是“关闭”的,即这个规定是不变的。
但是,员工什么时候开始工作,什么时候结束工作则是“开放”的,
可以根据实际情况进行调整。
例如在勇哥的公司,项目经理的打卡就是弹性的,一个月不限补卡次数。

这种制度设计体现了开闭原则的核心思想,即对不变的部分进行封闭,
对可能变化的部分进行开放,从而在实现稳定的同时,也能适应实际的变化和需求。


电脑的外设

电脑的USB接口或显卡插槽等,都遵循了一定的规范和标准。
电脑的主板和核心部件是封闭的,不经常变动,但用户可以根据需要添加各种外设,
如键盘、鼠标、打印机、扫描仪等。
这些外设只要符合既定的接口标准,都可以与电脑连接并正常工作。


手机的软件更新

对于手机来说,它是一个相对稳定的系统,用户依赖其各种功能。
但当需要增加新功能或修复bug时,按照开闭原则,
手机的硬件和核心系统应该是“关闭”的,即不经常变动,以保持其稳定性和可靠性。
为了实现这一原则,手机制造商设计了软件更新的机制。
当需要变动时,制造商会发布软件更新,而不是要求用户更换硬件。
这样,现有系统保持稳定,而新功能或修复通过软件更新加入。
这就是“对扩展开放,对修改封闭”。
因此,手机系统的设计和更新策略是开闭原则在生活中的典型应用。


汽车的周边产品

汽车的周边产品,如防雨贴、车载导航等,可以算作是开闭原则的例子。
汽车的核心功能,如发动机、刹车等,是保持封闭和稳定的。
但是,通过添加周边产品,汽车的功能得到了扩展,而这些扩展并不改变汽车的核心功能。
这就像是在一个稳定的系统上进行扩展,而不对原有系统做修改,这正是开闭原则的体现。


电商的支付系统

电商系统中的支付模块设计也是一个开闭原则的例子。
在这个例子中,设计一个抽象的支付类,然后让各种具体的支付方式,
如支付宝、微信支付等,继承这个类并实现其抽象方法。

当需要增加新的支付方式时,只需要新增一个子类并实现相应的方法,
而不需要修改原有的支付代码。
这样一来,电商系统的核心支付功能保持封闭和稳定,
同时又能通过扩展子类的方式支持新的支付方式,体现了开闭原则的思想。


操作系统的驱动程序架构

在操作系统中,核心的系统功能是稳定的,
而设备驱动程序经常需要更新和扩展以适应新的硬件设备。
操作系统通常定义一个设备驱动的接口,而具体的驱动程序则由设备制造商实现。
当插入一个新的硬件设备时,只要其驱动程序符合预定义的接口,
操作系统就能无缝地管理和控制这个新设备。

这种设计方式使得操作系统可以在不修改核心代码的情况下扩展支持新的硬件设备,
既保证了系统的稳定性,又体现了对扩展的开放性,完全符合开闭原则。


一国两制

一国两制是中国在政治领域的一个创举。
因为中国社会主义制度是核心的,不可动摇的。让香港采取资本主义制度,相当于扩展出了一套制度。
这样保持了核心的稳定性,又体现了对扩展的开放性,符合开闭原则



家族的生意不能丢,还要按时代和市场的变化开发更多的新品

这句话可以看作是开闭原则的应用。

在这个家族生意的场景中,“家族的生意不能丢”代表了已有的基础和核心业务,这部分应当保持稳定,
不轻易修改。
而“按时代和市场的变化开发更多的新品”则代表了在面对外部变化时,
通过扩展新的产品线来适应这些变化,而不是直接改变原有的核心业务。

这种在保持核心业务稳定的基础上,扩展新的业务来适应变化的做法,
与开闭原则中“对修改封闭,对扩展开放”的思想是一致的。



--------------------- 

作者:hackpig

来源:www.skcircle.com

版权声明:本文为博主原创文章,转载请附上博文链接!


本文出自勇哥的网站《少有人走的路》wwww.skcircle.com,转载请注明出处!讨论可扫码加群:
本帖最后由 勇哥,很想停止 于 2023-11-14 16:09:18 编辑

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

会员中心
搜索
«    2024年4月    »
1234567
891011121314
15161718192021
22232425262728
2930
网站分类
标签列表
最新留言
    热门文章 | 热评文章 | 随机文章
文章归档
友情链接
  • 订阅本站的 RSS 2.0 新闻聚合
  • 扫描加本站机器视觉QQ群,验证答案为:halcon勇哥的机器视觉
  • 点击查阅微信群二维码
  • 扫描加勇哥的非标自动化群,验证答案:C#/C++/VB勇哥的非标自动化群
  • 扫描加站长微信:站长微信:abc496103864
  • 扫描加站长QQ:
  • 扫描赞赏本站:
  • 留言板:

Powered By Z-BlogPHP 1.7.2

Copyright Your skcircle.com Rights Reserved.

鄂ICP备18008319号


站长QQ:496103864 微信:abc496103864