对扩展开放,对修改关闭。
利用继承设计子类的行为,是在编译时静态决定的,而且所有的子类都会继承到相同的行为。然而,如果能够利用组合的做法扩展对象的行为,就可以在运行时动态的进行扩展。
java io类库都是用来包装inputstream的,重写它的read方法。
装饰者和被装饰者需要有相同的类型,实现同一个接口,或继承统一抽象类。如果依赖继承,那么类的行为只能在编译时静态决定。换句话说,行为如果不是来自超类,就是子类覆盖后的版本,利用组合,可以运行时把装饰者混合者用。
对扩展开放,对修改关闭。
利用继承设计子类的行为,是在编译时静态决定的,而且所有的子类都会继承到相同的行为。然而,如果能够利用组合的做法扩展对象的行为,就可以在运行时动态的进行扩展。
java io类库都是用来包装inputstream的,重写它的read方法。
装饰者和被装饰者需要有相同的类型,实现同一个接口,或继承统一抽象类。如果依赖继承,那么类的行为只能在编译时静态决定。换句话说,行为如果不是来自超类,就是子类覆盖后的版本,利用组合,可以运行时把装饰者混合者用。