设为首页 收藏本站
查看: 1068|回复: 0

[经验分享] 开放-封闭原则(OCP:The Open

[复制链接]

尚未签到

发表于 2019-1-27 14:05:27 | 显示全部楼层 |阅读模式
  开放-封闭原则(OCP:The Open-Closed Principle)
      开放-封闭原则:软件实体(类,模块,函数等等)应该是可以扩展的,但是不可修改的。
设计的目的便在于面对需求的改变而保持系统的相对稳定,从而使得系统可以很容易的从一个版本升级到另一个版本。
      大家可能都有这样的体会,要满足各种各样的客户,并且客户的需求经常变化,程序员就是这样的辛苦命,整天改过来改过去,特别用一些非面向对象的语言写的代码,函数的参数变得越来越长,里面的Case情况慢慢增加,函数变得很大。软件几年之后就变得难于理解和维护,软件的生命周期好像就要终止。如果能够扩展模块的功能,同时又不修改原来已经测试通过的代码,那多好啊!
    这完全是可以实现的,关键是抽象。把可能的变化用抽象来隔离它。面向接口编程,而不是面向对象编程,能增强程序的灵活性;如Client类调用Server类,如果我们希望Client对象使用另外一个不同的Server对象,就必须修改Client中使用Server类的地方;如果Client调用Server的接口就可以避免这种修改,只要生成新的接口实现类,修改Main等初次使用新子类的地方而不需要修改Client类;使用Strategy模式和Template Method模式是满足OCP的最常用方法。
    如果需要适应某种变化就需要对这种变化进行抽象,会增加程序的复杂度。所以设计人员应该熟悉业务和了解客户需求,预测到需要进行抽象的变化。
    敏捷建模不建议提前进行各种假想的变化抽象,而是当变化发生第一次的时候抽象这种变化,以后同样的变化就变得很容易。对代码进行重构以保持良好的结构是很重要的,每次抽象都不应该使软件变得越来越僵化。这是非面向对象的语言不具备的优势
  





运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-668303-1-1.html 上篇帖子: ORACLE RAC--cannot open shared object file 下篇帖子: Script:Diagnostic ORA
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表