java装饰模式
Uml图:
//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);
}
}