装饰模式(别名:包装器)
动态地给对象添加一些额外的职责。就功能来说装饰模式相比生成子类更为灵活。
一 、 概述
装饰模式是动态地扩展一个对象的功能,而不需要改变原始类代码的一种成熟模式。在装饰模式中, “ 具体组件 ” 类和 “ 具体装饰 ” 类是该模式中的最重要的两个角色。二、装饰模式模式的结构与使用
装饰模式的结构中包括四种角色:
装饰模式的结构描述与使用
1.抽象组件 :Bird.java
public abstract class Bird{
public abstract int fly();
}
2.具体组件 :Sparrow.java
public class Sparrow extends Bird{
public final int DISTANCE=100;
public int fly(){
return DISTANCE;
}
}3.装饰 (Decorator):Decorator.java
public abstract class Decorator extendsBird{
protected Bird bird;
public Decorator(){
}
public Decorator(Bird bird){
this.bird=bird;
}
}
4.具体装饰(ConcreteDecotator):SparrowDecorator.java
public class SparrowDecorator extendsDecorator{
public final int DISTANCE=50; //eleFly方法能飞50米
SparrowDecorator(Birdbird){
super(bird);
}
public int fly(){
int distance=0;
distance=bird.fly()+eleFly();
return distance;
}
private inteleFly(){ //装饰者新添加的方法
return DISTANCE;
}
}5.应用 Application.java
public class Application{
public void needBird(Birdbird){
intflyDistance=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);
}
}
装饰模式的优点