动态地给对象添加一些额外的职责。就功能来说装饰模式相比生成子类更为灵活。
装饰模式的结构中包括四种角色:
抽象组件(Component) :定义一些需要装饰的一些方法
具体组件(ConcreteComponent) :抽象组件的子类,即被装饰者
装饰(Decorator) :抽象组件的子类
具体装饰(ConcreteDecotator):装饰的子类
抽象组件 : Bird.java
public abstract class Bird{
public abstract int fly();
}
具体组件 : Sparrow.java
public class Sparrow extends Bird{
public final int DISTANCE=100;
public int fly(){
return DISTANCE;
}
}
装饰 (Decorator): Decorator.java
public abstract class Decorator extends Bird{
protected Bird bird;
public Decorator(){
}
public Decorator(Bird bird){
this.bird=bird;
}
}
具体装饰(ConcreteDecotator): SparrowDecorator.java
public class SparrowDecorator extends Decorator{
public final int DISTANCE=50; //eleFly方法能飞50米
SparrowDecorator(Bird bird){
super(bird);
}
public int fly(){
int distance=0;
distance=bird.fly()+eleFly();
return distance;
}
private int eleFly(){ //装饰者新添加的方法
return DISTANCE;
}
}
应用 Application.java
public class Application{
public void needBird(Bird bird){
int flyDistance=bird.fly();
System.out.println("这只鸟能飞行"+flyDistance +"米");
}
public static void main(String args[]){
Application client=new Application ();
Bird sparrow=new Sparrow();
Bird sparrowDecorator1=
new SparrowDecorator(sparrow);
Bird sparrowDecorator2=
new SparrowDecorator(sparrowDecorator1);
client.needBird(sparrowDecorator1);
client.needBird(sparrowDecorator2);
}
}