(以下内容来自网络,只为加深理解)

开放封闭原则

软件实体软件实体应该是可扩展,而不可修改的。

开放:扩展

封闭:修改

对扩展开放意味着在又新的需求或变化时,可以对代码进行扩展,以适应新的情况。

对修改封闭意味着程序一旦设计完成,就可以独立完成其工作,而不要对程序进行任何修改。

Python实例

已经定义好的3函数,现在要去在对每个函数的调用进行验证

# 重复造轮子方式
def validate():print 'validate'def f1():validate()print 'this is f1'def f2():validate()print 'this is f2'def f3():validate()print 'this is f3'f1()
f2()
f3()

重复造轮子不是个好的方法,而且不符合开放封闭原则,对已经完成的函数进行了修改

def validate(func):print 'validate'return funcdef f1():print 'this is f1'def f2():print 'this is f2'def f3():print 'this is f3'f1 = validate(f1)
f1()

这种方法采用对调用的方法进行包含,在完成验证进行执行需要执行的函数

将需要执行的函数以参数的形式传递给验证函数,在完成验证后在返回需要执行的函数(这里传递和返回的只是函数的地址)

对验证函数的返回值进行函数调用可以完成同样的需求

既没有重复造轮子也没有改变函数本身,完全符合开放封闭原则

这种实现方式在python中有更好的方法可以实现(装饰器)

def validate(func):print 'validate'return func@validate
def f1():print 'this is f1'

转载于:https://www.cnblogs.com/hl540/p/6545832.html

博客园第一天,开放封闭原则相关推荐

  1. 我的博客园第一个博客.

    博客园的风格清新,不错的博客,很高兴来这里......以后有了自己的网络空间博客小天地哈哈 物以类聚,人以群分.... 转载于:https://www.cnblogs.com/zeenzhou/p/1 ...

  2. 祝贺Terrylee博客园Post达到100篇

    随着<小议.NET中的对象拷贝>一文的发表,Terrylee在博客园的Post总数达到了100篇.从上博客园第一天开始,就喜欢上这里了,喜欢这里的文章,喜欢这里的氛围.申请博客园的帐号10 ...

  3. 博客园 美化主题(绝对有效)+ CSDN 搬入 博客园

    文章目录 其他 前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到网站: https://www.cbedai.net/lf 博主介绍: – 我是了 凡 ...

  4. 第一天,搬家到博客园

    csdn 2 博客园. 从2009年大二刚开学,第一次接触技术blog,第一次认识了CSDN,开始了我的blog之旅,三年零四个月,10万+pv,rank:2800. 回顾这几年的blog,它对我帮助 ...

  5. “北京今年入冬的第一场雪”,纪念博客园写日志一年了

    今天是2009年11月1日,北京下了入冬以来的第一场雪,就在昨天我还以为北京还是秋季,可是今天早上醒来看到外面飘落的大雪,已经意识到北京的冬天已经到来了 来博客园写博客一年了,结识了很多朋友,也为社区 ...

  6. 庆祝自己在博客园开通个人生涯第一个关于工作的博客

    2017年11月6日,下午14:32开始编写个人第一个关于工作的博客. 虽然只是记录自己的心情,但是还是好激动. 之前看到很多各行各业的人士分享自己的知识,很羡慕,也曾经很多次下定决心写自己的博客,但 ...

  7. 关于博客园开放API的授权问题解决

    关于博客园开放API的授权问题解决 参考文章: (1)关于博客园开放API的授权问题解决 (2)https://www.cnblogs.com/bu-dong/p/9236238.html 备忘一下.

  8. [持续更新中]博客园开放api、还有知乎、V2EX开放接口

    最新整理,持续更新ing- 博客园开放api 博客服务接口 http://wcf.open.cnblogs.com/blog/help 新闻服务接口 http://wcf.open.cnblogs.c ...

  9. python基础论文_Python基础 - 文章分类 - rwwh - 博客园

    文章分类 - Python基础 摘要:参考 https://www.cnblogs.com/yuanchenqi/articles/5722574.html https://www.cnblogs.c ...

最新文章

  1. 微信小程序图标不支持html,微信小程序实现自定义加载图标功能
  2. php reactphp wss_workerman的基本用法(示例详解)
  3. LeetCode Search in Rotated Sorted Array II
  4. mqtt linux 编译,MQTT客户端代码X64位Ubuntu环境编译+测试实践小结
  5. js冒泡法和数组转换成字符串
  6. GPU Gems1 - 25 用纹理贴图进行快速过滤宽度的计算
  7. java初学者指南_Java初学者指南
  8. T-SQL命令性能比较– NOT IN与SQL NOT EXISTS与SQL LEFT JOIN与SQL EXCEPT
  9. 服务器上把计算机放桌面,远程服务器这么显示在电脑桌面
  10. 如何写好标题,才能轻松上简书首页?
  11. iif能用到mysql中吗_数据库 iif
  12. layui 时间控件 只显示时分或者分秒
  13. 网络存储磁带库术语解释
  14. c语言美元符号用法,R函数()中美元符号“$”的含义是什么?
  15. 程序员对老板说:老子,明天不上班!结果...
  16. 编码器SRT协议三种模式(listener, caller, rendezvous)简介
  17. Qt编写地图综合应用55-海量点位标注
  18. 微信pc端window10多开应用
  19. paper survey之——多机器人协作介绍(Multi-Robot System, MRS)
  20. win7电脑开不了机,CPU风扇转一下,停一下

热门文章

  1. 一项横断面人群研究中比较放射学阴性的中轴脊柱关节炎患者与强制性脊柱炎患者之间的差别...
  2. java gps时间转换工具_java 时间戳和时间互转工具 和 时间偏移量计算
  3. 区块链技术到底有啥用?
  4. osi七层网络层_OSI层速成课程
  5. sql avg函数使用格式_SQL AVG-SQL平均函数用语法示例解释
  6. 手动部署OpenStack环境(一:Virtual Box 5.1 环境的安装及配置)
  7. 2014计算机三级网络技术,2014计算机三级网络技术综合题解题思路
  8. java右移位_java、、移位操作方法
  9. mongodb 索引去重_朋友问你 MongoDB 是什么?给他看这篇就好了
  10. (Mirage系列之六)在Mirage里使用Collection