Decorator pattern 装饰模式是用于对象的创建,而此对象的创建基于原来对象的加强,也就是通过原组件对象的参数传递,把此对象层层加强。
动态地给一个对象添加一些额外的职责。就增加功能来说,Decorator模式相比生成子类更为灵活。
二.组成部分:
1. 抽象构件:原始的功能接口
2. 具体构件:具体的原始功能类
3. 装饰角色:持有具体构件类的对象,以便执行原有功能
4. 具体装饰:具体扩展的功能在这里
[img]http://peterji.iteye.com/upload/attachment/97590/1b52c7ba-027e-3686-8d82-4d0187428c55.jpg[/img]
Component:
Concrete Component:
Decorator:
Concrete Decorator:
Test:
动态地给一个对象添加一些额外的职责。就增加功能来说,Decorator模式相比生成子类更为灵活。
二.组成部分:
1. 抽象构件:原始的功能接口
2. 具体构件:具体的原始功能类
3. 装饰角色:持有具体构件类的对象,以便执行原有功能
4. 具体装饰:具体扩展的功能在这里
[img]http://peterji.iteye.com/upload/attachment/97590/1b52c7ba-027e-3686-8d82-4d0187428c55.jpg[/img]
Component:
public abstract class CarParent {
public void run() {
System.out.println("car can run");
}
public void stop() {
System.out.println("car can stop");
}
public abstract void setFace() ;
}
Concrete Component:
public class Car extends CarParent {
@Override
public void setFace() {
// TODO Auto-generated method stub
}
}
Decorator:
public abstract class Decorator extends CarParent {
protected CarParent carParent;
public Decorator(CarParent carParent) {
this.carParent = carParent;
}
@Override
public void setFace() {
this.carParent.setFace();
}
}
Concrete Decorator:
public class DecoratorColor extends Decorator {
public DecoratorColor(CarParent carParent) {
super(carParent);
// TODO Auto-generated constructor stub
}
public void setCorlor() {
System.out.println("the car is red!");
}
@Override
public void setFace() {
setCorlor();
super.setFace();
}
}
public class DecoratorLight extends Decorator {
public DecoratorLight(CarParent carParent) {
super(carParent);
}
public void setLight() {
System.out.println("the car is light!");
}
@Override
public void setFace() {
setLight();
super.setFace();
}
}
Test:
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
CarParent cp = new Car();
cp = new DecoratorColor(cp);
cp = new DecoratorLight(cp);
cp=new DecoratorWheel(cp);
cp.setFace();
}
}