当前位置: 首页 > 编程日记 > 正文

博客园第一天,开放封闭原则

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

开放封闭原则

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

开放:扩展

封闭:修改

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

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

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

相关文章:

centos6.5 php5.2,Linux中PHP安装与配置(CentOS-6.5:php-5.2.13)

1 PHP简介 PHP(PHP: Hypertext Preprocessor的缩写,中文名:“超文本预处理器”)是一种通用开源脚本语言。语法吸收了C语言、Java和Perl的特点,入门门槛较低,易于学习,使用广泛,主要适用于Web开发领域。…

Oracle中分页查询语句

Oracle分页查询语句使我们最常用的语句之一,下面就为您介绍的Oracle分页查询语句的用法,如果您对此方面感兴趣的话,不妨一看。 Oracle分页查询语句基本上可以按照本文给出的格式来进行套用。Oracle分分页查询格式: SELECT * FROM …

大一c语言大作业课题大全,昆明理工大学大一C语言大作业题目.doc

昆明理工大学大一C语言大作业题目综合性实践排序求平均值(包括将数拆散求最大最小值)。函数ReadDat()随机产生100个存放到数组aa中00个jsSort()函数的功能是:进行降序排列。最后调用函数WriteDat()函数函数ReadDat()00个四位数存入数组a中,函数jsValue()…

1 项目里面如何打印log日志

1 首先写一个logging.py文件 import logging from conf import setting #配置文件,里面有日志存放路径def mylog():logger logging.getLogger()# 吸星大法# 先创造一个格式formatter logging.Formatter(%(asctime)s - %(name)s - %(levelname)s - %(message)s)#…

计算机应用主要设计到哪些方面,大学计算机应用基础教案设计.doc

大学计算机应用基础教案教 师: 腾莉单 位: 数学计算机学院2009 ~ 2010学年第一讲 计算机基础知识概述【教学目的】了解计算机概念、特点、发展历程、类型应用领域等基本知识计算机基本概念和分类计算机一、计算机的概念计算机(computer)是一种能自动、高…

php点击复制按钮到我的粘贴板,JS 实现点击按钮复制内容到粘贴板 clipboard

具体实现如下:点击按钮复制内容到粘贴板body {text-align: center;}#p1 {line-height: 150px;font-size: 40px;}#source {font-size: 18px;}.wrapper {margin-top: 50px;}.btn {width: 300px;height: 120px;background-color: #4da2fd;color: #fff;font-size: 20px;text-decora…

透明代理Transparent Proxy

透明代理Transparent Proxy透明代理Transparent Proxy类似于普通代理,它可以使得处于局域网的主机直接访问外网。但不同之处,它不需要客户端进行任何设置。这样,客户端误以为是直接连接的外网主机,所以称为透明代理。由于客户端没…

C语言case次数有限制吗,用switch...case语句统计数字、空格和其他字符出现的次数...

//用switch...case语句统计数字、空格和其他字符出现的次数//转自K&R#include int main(void){int c, i, nwhite, nother, ndigit[10];nwhite nother 0;for (i 0; i < 10; i)ndigit[i] 0;while ((c getchar()) ! EOF){switch (c){case 0: case 1: case 2: case 3: …

C++——简单数据类型及布尔类型

一. 简单数据类型 数据类型描述了对象在内存存储区中占据的空间大小&#xff0c;描述了对象能够表示的数据范围 和类型。C语言中常用的数据类型有整型、实型、字符型&#xff08;这3种类型也被称之为简单数 据类型&#xff09;、数组类型、布尔类型、枚举类型、结构体类型、公用…

document.onclick在ios上不触发的解决方法与touchstart点击穿透处理

document.onclick function (e) {var e e ? e : window.event;var tar e.srcElement || e.target;if (tar.id ! "searchData") {pagesZone.style.display "none";} } 以上代码在电脑浏览器和安卓上都能触发alert事件&#xff0c;但是在iOS上却完全没有…

php广告插入代码,[教程]如何在phpcms中添加html代码广告

像上次说的那样&#xff0c;phpcms里直接生成的js文件是不能包含html代码的。本文介绍的还是利用上次所用的ads循环和phpcms自带的文本广告&#xff0c;新建一个支持html代码的模板&#xff0c;从而达到支持html广告的效果。这样设置以后&#xff0c;phpcms可以支持大部分的广告…

清华计算机学院新成立,清华AI更进一步:清华大学成立人工智能国际治理研究院...

清华AI更进一步&#xff1a;清华大学成立人工智能国际治理研究院2020-06-28 15:19:394点赞4收藏7评论集微网消息(文/小如)6月24日&#xff0c;清华大学人工智能国际治理研究院成立会议举行。图片来源&#xff1a;清华新闻网在成立会议暨第一次管委会会议上&#xff0c;清华大学…

c语言基础知识pdf下载,C语言主基础知识.pdf

C语言主基础知识泰山学院CSDN 俱乐部C 语言主要基础内容1、预处理命令 预处理的概念&#xff1a;在编译之前进行的处理。预处理命令以符号“#”开头。2 、关于#include 在编译之前将 stdio.h 文件包含入源文件中(include&#xff1a;包含) 即将stdio.h 文件中的内容复制到代码中…

ASP.NET Aries 高级开发教程:Excel导入配置之规则说明(下)

前言&#xff1a; 前面两篇都是大体介绍流程&#xff0c;有一些配置细节&#xff0c;没有细说&#xff0c;这里用一篇补上。 1、Excel配置项 起始行索引、列头跨行数&#xff1a; 对于自定义的Excel导入模板&#xff08;有时候模板是由客户提供&#xff0c;模板的规则很乱&…

php agi api,PHP agi 编写测试

部分代码来源于网络&#xff0c;经过调试后写在此&#xff1a;/etc/asterisk/phpagi.conf 配置内容&#xff1a;[phpagi]debugtrue //是否打开debug&#xff0c;一般生产环境关闭error_handlertruetempdir/var/spool/asterisk/tmp/[asmanager]server10.1.0.7port5038usernamea…

查询数据库所有表、字段、触发器等

SQL SERVER查看所有表名&#xff1a;select name from sysobjects where typeU查询表的所有字段名&#xff1a;Select name from syscolumns Where IDOBJECT_ID(表名)select * from information_schema.tablesselect * from information_schema.viewsselect * from information…

浅谈学前教育与计算机,浅谈学前教育专业计算机教学改革与实践.doc

精品文档&#xff0c;助力人生&#xff0c;欢迎关注小编&#xff01;浅谈学前教育专业计算机教学改革与实践【摘要】学前教育专业的计算机教学如果按照普通大专院校的计算机文化基础课教学模式&#xff0c;基于学生的专业及学习特点&#xff0c;培养的学生对于计算机知识的认识…

c语言指针要点,C语言指针的重点有哪些?

指针说难也不难&#xff0c;说不难吧&#xff0c;有点难理解把握几点&#xff0c;就不是很难了1、指针是变量&#xff0c;可以当成一般的变量来操作2、指针可以做减法&#xff0c;不可以做加乘除&#xff0c;减法的意思是求两个内存空间之间隔着几个字节。加乘除没有意义3、内存…

python学习随笔(七)_函数

函数 #作用:封装和复用 数学定义&#xff1a;yf(x) &#xff0c;y是x的函数&#xff0c;x是自变量。yf(x0, x1, ..., xn) Python函数 由若干语句组成的语句块、函数名称、参数列表构成&#xff0c;它是组织代码的最小单元 完成一定的功能 函数的作用…

计算机控制里ddc什么缩略语,空调自动化术语和缩略语.doc

空调自动化术语和缩略语1.6 空调自动化术语和缩略语1.6.1 术语解释Application—Specific Controller,专用控制器&#xff1a;专用控制器是意图连接一个或几个设备以便提供某种特殊功能的数字控制器。专用控制器通常有固定的控制算法和有限的参数调整。Automatic Communication…

Linux中重定向--转载

转:http://blog.csdn.net/songyang516/article/details/6758256 1重定向 1.1 重定向符号> 输出重定向到一个文件或设备 覆盖原来的文件>! 输出重定向到一个文件或设备 强制覆盖原来的文件>> 输出重定向到一个文件或设…

matlab 2010无法运行程序,matalb r2010a安装后打开出现一系列警告,无法运行,哪位大神帮...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼Matlab R2010a安装完成后的错误&#xff1a;Warning: D:\Program Files\MATLAB\R2010b\toolbox\local\pathdef.m not found.Toolbox Path Cache is not being used. Type help toolbox_path_cache for more info Undefined functio…

小米4c怎么添加语言怎么设置在哪里,小米4c路由器设置教程

摘要 腾兴网为您分享:番茄小说&#xff0c;唱吧app&#xff0c;酷狗&#xff0c;腾讯会议&#xff0c;唯品会等知识经验教程&#xff0c;欢迎大家关注腾兴网。小米4c路由器该怎么设置&#xff0c;不少小伙伴们不清楚设置方法是什么&#xff0c;想要知道该怎么设置的&#xff0c…

用PHP计算个税,PHP计算个人所得税示例【不使用速算扣除数】

本文实例讲述了PHP计算个人所得税。分享给大家供大家参考&#xff0c;具体如下&#xff1a;不使用速算扣除数计算个人所得税&#xff0c;PHP自定义函数实现个人所得税计算。使用速算扣除数计算个人所得税过于简单&#xff0c;略过不提。PHP和JS有相同之处&#xff0c;知道PHP计…

mono+jexus 部署之CompilationException

使用 HelpPage 组件 CompilationException 好不容易在ubuntu上搭建了monojexus&#xff0c;欣喜若狂的部署上发布的网站&#xff0c;急忙打开&#xff0c;成功运行。 但是别高兴的太早&#xff0c;当我打开WebApi帮助页时出现了CompilationException。 解决办法 修改 WebConfig…

MAC 重置MySQL root 密码

MAC 重置MySQL root 密码 重置MySQL root 密码&#xff1a;当忘记密码&#xff0c;或者想要强行重置 MySQL 密码的时候&#xff0c;可以像下面这样&#xff1a; 1.停止 MySQL 服务 12sudo /usr/local/mysql/support-files/mysql.server stop//当停止失败 见下边 如何用mac 活动…

计算机二级vlookup引用怎么操作,VLOOKUP函数怎样引用二个条件

函数 LOOKUP的数组形式是在数组的第一行或第一列中查找指定数值&#xff0c;然后返回最后一行或最后一列中相同位置处的数值。如果需要查找的数值在数组的第一行或第一列&#xff0c;就可以使用函数LOOKUP 的这种形式。当需要指定列或行的位置时&#xff0c;可以使用函数 LOOKU…

android 自定义录像机,android-camera2 - 将自定义捕获请求构建器选项设置为使用Camera2 API捕获图像以使用OpenCV库进行摄像机校准 - 堆栈内存溢出...

我们正在使用Camera2 API捕获N张图像&#xff0c;而未设置任何自定义捕获请求构建器选项。 我们正在使用这些图像通过OpenCV Android库411进行相机校准。然后&#xff0c;我们正在使用OpenCV Android库进行图像失真处理。 角落处的输出图像不清晰&#xff0c;角落向中心缩小。 …

java读取配置文件信息

String configfile "cfg/client.cfg";// 读取配置文件账号密码Properties props new Properties();InputStream in new BufferedInputStream(new FileInputStream(configfile));props.load(in);String userName props.getProperty("userName");String …

php explore im,浏栏器器-explore.class.php_php

//原作者&#xff1a;epsilon7//SonyMusic(sonymusic163.net)class BrowserDetector {var $UA ""; //$HTTP_USER_AGENT的内容var $BROWSER "Unknown"; //浏览器类型http://www.gaodaima.com/46792.html浏栏器器-explore.class.php_phpvar $PLATFORM &quo…