定义:开就是对扩展是开放的;对修改是关闭的。具体而言;当要对一个功能进行添加时;可以在原有的基础上添加一个类;但不允许去修改原有的类。
举例说明:定义一个Person类 ;里面有一个Driver()的方法;传入一个Car的参数;然后调用Car。move方法
public class Person{ public void drive(Car car) { car.move(); } } public class Car { puboic void move() { system.out.println(" 小汽车移动 " ); } }
如果现在我们要开的是一个Mpv呢?修改代码如下:
public class Person{ public void drive(Mpv mpv) { mpv.move(); } } public class Car { puboic void move() { system.out.println(" 小汽车移动 " ); } } public class Mpv { puboic void move() { system.out.println(" mpv移动 " ); } }
这样子的话我们是不是修改了类里的方法参数;当然你也可以重载一个drive()方法。如果我们面向接口编程会是什么样子呢?
public class Person{ public void drive(Vehicle vehicle) { vehicle.move(); } } public interface Vehicle { public void move(); } public class Car implements Vehicle{ public void move() { system.out.println(" 小汽车移动 " ); } } public class Mpv implements Vehicle{ puboic void move() { system.out.println(" mpv移动 " ); }
此处如果要添加一个MPV;则第一种方式为修改参数Car 为Mpv(对修改原有类为关闭的);但第二种将其抽象为交通工具后;只需要添加一个Mpv的类;然后传入对应的参数即可(对扩展是开放的);
总结 :用抽象构建框架,用实现扩展细节