process_file("audio.mp3") # 输出:Processing audio file: audio.mp3 在这个例子中,如果我们需要添加对新的文件类型的处理,我们只需要实现一个新的FileProcessor子类,并在get_file_processor函数中添加相应的逻辑。我们不需要修改任何现有的代码,这符合OCP原则的要求。这样,我们的代码对扩展是开放的,对修改是封闭的。
二、OCP举例: 1、例子一 假如我们要写一个工资税类,工资税在不同国家有不同计算规则,如果我们不坚持OCP,直接写一个类封装工资税的算税方法,而每个国家对工资税的具体实现细节是不尽相同的!如果我们允许修改,即把现在系统需要的所有工资税(中国工资税、美国工资税等)都放在一个类里实现,谁也不能保证未来系统不...
开放封闭原则就相对的解决了这个问题,它强调的是你设计的模块应该从不改变(绝对不改变是不可能的,只能相对少改动)。当需求变化时,你可以通过添加新的代码来扩展这个模块的行为,而不去更改那些已经存在的可以工作的代码。 举一个简单的开放封闭原则的例子:书店售书打折。 书店周年庆打折售书,40块以上的书打7折,40...
上面这个例子,通过一处扩展,一处修改,实现了打折的新需求。可能有同学就会问:“这不还是修改了代码吗?” 修改代码就意味着违反了开闭原则吗? BookStore类确实修改了,这部分属于高层次的模块。在业务规则改变的情况下,高层模块必须有部分改变以适应新业务。添加一个新功能,不可能任何模块、类、方法的代码都不“修...
当然这只是一个简单的例子来。在实际程序中,类似DrawAllShapes函数中的switch语句会在应用程序的各个函数中重复不断地出现。每个函数中switch语句负责完成的工作差别甚微。这些函数中,可能有负责拖拽形状对象的,有负责拉伸形状对象的,有负责移动形状对象的,有负责删除形状对象的,等等。在这样的应用程序中增加一种...
二、例子一,繁忙的银行业务员 根据代码会发现,如果增加了其他业务员,就需要在BankWorker中添加一个业务方法,也让银行业务员“业务”繁忙,容易混乱,扩展性也不好 2.1 BankWoker //银行业务员 public class BankWorker { //负责存款业务 public void saving() { ...
java开放封闭原则例子 理解Java的开放封闭原则 开放封闭原则(Open/Closed Principle)是面向对象设计的核心原则之一。根据这一原则,软件实体(类、模块、函数等)应该对扩展开放,对修改封闭。这意味着我们应该通过添加新代码来实现功能扩展,而不是通过修改已有代码。
举个例子,假设我们有一个计算器类 Calculator,它可以根据用户输入的表达式进行计算。最初,它只支持加法运算,代码如下: 代码语言:javascript 复制 classCalculator{publicintcalculate(String expression){// 如果表达式是加法运算,返回计算结果if(expression.contains("+")){String[]numbers=expression.split("\\+");int...
下面用两个例子来说明开放封闭原则。 1、连接数据库为例。 比如在程序中用到的不同类型的数据库连接,Access和Oracle。直接连接如下: class ConnectAccess { public string ConnectString() { string dataPath = "数据库路径"; return string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Persist Sec...