分析一波
开放封闭原则,它规定了软件设计和维护时应该遵守的一种规则,即对扩展开放、对修改关闭。
扩展和修改不难理解,扩展指的是对原有的结构进行拓展,增加新的类让其继承父类、实现接口,利用多态、继承等特性进而实现新的功能。而修改在这里指的是更改那些已经投入使用的类尤其是抽象类和接口,包括增删改类方法及其实现步骤或参数,还有类的属性等。
面对功能的实现与可能的增改。对扩展开放意味着,通过扩展代码、增加新的类进行实现是允许和推荐的;而对修改关闭意味着,要尽可能地避免对源代码的修改。
合在一起说,就是在设计与维护时应尽可能的通过扩展而非修改原有结构来实现新的功能。
为了达到可便于修改这一要求,抽象是必不可少的,一个恰到好处的抽象总可以囊括即将到来的变化,当需求变化来临时只需要针对具体的变化扩展一个抽象的具体实现类,由于多态的特性很好的解决问题,同时也避免对原有代码的修改。可以说,对扩展开放”的关键是”抽象”,而对象的多态则保证了这种扩展的开放性(更具体的说,应该是里氏替换原则)。
来个粟子
这里可以引用上一篇讲述里氏替换原则的例子来说明这个原则:
最初的需求:设计类表示动物鸟,具有移动方法,实例化鸟类对象并调用这个方法。
实现:
class Bird
{
String name;
Bird(String name){
this.name = name;}
public void move()
{
System.out.println(name + " is flying~~~");
}
}
...
class Main
{
public static void main(String[] args)
{
Bird swallow= new Bird("swallow");
swallow.move();