背景
刚刚手机连上网,发现又有一大堆可以升级的软件。怎么回事?记得刚升级不久啊,难道做一个成熟的APP这么简单。联想到刚刚学习的设计模式,想着这可能是设计模式中的开放-封闭原则在其中起了不小的作用,下面我们详细的了解一下什么是开放-封闭原则(Open-Closed Principle OCP)吧。
定义
软件实体应该可以扩展,但是不可修改(Software entities(classes,modules,functions etc) should open forextension ,but close for modification)。
详细说明:
开发-封闭原则其实是有两个特征:
1、对于扩展是开放的(Openfor extension)
2、对于更改是封闭的(Closedfor modification)
用途
我们做任何系统都不要指望系统一开始时需求确定,就再也不发生变化,这是不现实也不科学的,既然系统一定会发生需求的变化,一定会出现修改,那么我们在设计软件时就要考虑“怎样设计才能面对需求的改变却可以保持相对稳定,从而使得系统可以在第一个版本以后不断推出新的版本”。
一句话总结就是:软件需求总是变化的,世界上没有一个软件的是不变的,因此对软件设计人员来说,必须在不需要对原有系统进行修改的情况下,实现灵活的系统扩展。
示例
下面是一般面向对象的方法编写的简单计算其中关于运算符类的相关代码,每次增加新的运算符时必须更改整个类。
public class Operation { public static double GetResult (double numberA,double numberB,string operate) { double result = 0d; switch(operate) { case "+": result = numberA + numberB; break; case "-": result = numberA - numberB; break; case "*": result = numberA * numberB; break; case "/": result = numberA / numberB; break; } return result; } }
当我们每次需要增加某一个运算符我们都需要去改变整个类,如果是一个复杂的项目我们无法想象会遇到多么大的问题。而如果我们运用抽象工厂方法的话,就解决了这个问题(可用如下类图所示方法)。
优点
开放-封闭原则是面向对象设计的核心所在。遵循这个原则可以带来面向对象技术所声称的巨大好处,也就是可维护、可扩展、可复用、灵活性好。