一、装饰者模式概念

装饰者模式:提供了一种比继承更加优雅更加弹性的扩展对象功能的方式。

特点:装饰者虽然可以扩展对象功能,但是也会增加很多的子类使得系统变得复杂。

要点:①装饰者和被装饰者具有相同的超类型

   ②可以在装饰者委托被装饰者行为的时候扩展功能

应用: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");
    }

}
12-20 16:19