java装饰模式

Uml图:


java装饰模式

//Bird类:

public abstract class Bird {
   public abstract int fly();
}

//具体组件:
Sparrow.java

public class Sparrow extends Bird {
      private final int DISTANCE = 100;

      @Override
      public int fly() {
            return DISTANCE;
      }
}

//装饰

Decorator.java

public abstract class Decorator extends Bird {
      protected Bird bird;

      public Decorator(Bird bird) {
            this.bird = bird;
      }
}

//具体装饰:

SparrowDecorator.java

public class SparrowDecorator extends Decorator {
      public final int DISTANCE = 50;

      SparrowDecorator(Bird bird) {
            super(bird);
      }

      @Override
      public int fly() {
            int distance = 0;
            distance = bird.fly() + eleFly();
            return distance;
      }

      private int eleFly() {
            return DISTANCE;
      }

}

//装饰模式使用:

public class Application {
      private static void needBird(Bird bird) {
            int flyDistance =bird.fly();
            System.out.println("飞行距离"+flyDistance+"米");
            
      }
      public static void main(String[] args) {
      Bird sparrowBird =new Sparrow();
      Bird sparrowBird2=new SparrowDecorator(sparrowBird);
      Bird sparrowBird3 =new SparrowDecorator(sparrowBird2);
      needBird(sparrowBird);
      needBird(sparrowBird2);
      needBird(sparrowBird3);
      }

}