一、装饰者模式概念
装饰者模式:提供了一种比继承更加优雅更加弹性的扩展对象功能的方式。
特点:装饰者虽然可以扩展对象功能,但是也会增加很多的子类使得系统变得复杂。
要点:①装饰者和被装饰者具有相同的超类型
②可以在装饰者委托被装饰者行为的时候扩展功能
应用:Java IO
二、UML图
装饰者要和被装饰者有相同的接口,要有被装饰者的方法,这样才能够在任何需要原类型的场合使用装饰者替换。
三、代码
Bird.java
public interface Bird { int fly(); }
BirdLow.java
public class BirdLow implements Bird{ public int fly() { return 50; } }
Decorator.java
public class Decorator implements Bird{ private Bird b; Decorator(Bird b) { this.b = b; } public int fly() { return 50000 + b.fly(); } }
Test.java
public class Test { public static void main(String[] args) { Bird b = new BirdLow(); System.out.println("小鸟可以飞 " + b.fly() + "m"); System.out.println("装上火箭发射器可以飞 " + new Decorator(b).fly() + "m"); } }