[color=red]【装饰者模式】动态地给对象添加一些额外的职责。就功能来说装饰模式相比生成子类更为灵活。
[/color]
[/color]
package com.demo.decorator;
//具体装饰
public class SparrowDecorator extends Decorator {
public final int DISTANCE=50;
SparrowDecorator(Bird bird){
super(bird);
}
public int fly(){
int distance=0;
//委托被装饰者bird调用fly(),然后再调用eleFly()
distance=bird.fly()+eleFly();
return distance;
}
//eleFly方法能飞行50米
//装饰者添加的新方法
private int eleFly(){
return DISTANCE;
}
}
package com.demo.decorator;
public class Application {
public void needBird(Bird bird){
int flyDistance=bird.fly();
System.out.println("这只鸟能飞行"+flyDistance+"米");
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Application client=new Application();
//无装饰
Bird sparrow=new Sparrow();
//一层装饰过的麻雀
Bird sparrowDecorator1=new SparrowDecorator(sparrow);
//二层装饰过的麻雀
Bird sparrowDecorator2=new SparrowDecorator(sparrowDecorator1);
client.needBird(sparrow);//100
client.needBird(sparrowDecorator1);//150
client.needBird(sparrowDecorator2);//200
}
}