动态的为一个对象增加新的功能。
装饰模式是一种用于代替继承的技术,无须通过继承增加之类就能扩展对象的新功能。
使用对象的关联关系代替继承关系,更加灵活,同时避免类型体系的快速膨胀。Componment抽象构件角色
/**
* 抽象组件
*/
public interface ICar {
void move();
}
/**
* 真实构建
*/
class Car implements ICar{
@Override
public void move() {
System.out.println("陆地上跑");
}
}
class SuperCar implements ICar{
protected ICar car;
public SuperCar(ICar car) {
super();
this.car = car;
}
@Override
public void move() {
car.move();
}
}
class FlyCar extends SuperCar{
public FlyCar(ICar car) {
super(car);
}
public void fly(){
System.out.println("天上飞");
}
public void move(){
super.move();
fly();
}
}
class WaterCar extends SuperCar{
public WaterCar(ICar car) {
super(car);
}
public void swim(){
System.out.println("水中游");
}
public void move(){
super.move();
swim();
}
}
class AICar extends SuperCar{
public AICar(ICar car) {
super(car);
}
public void autoMove(){
System.out.println("自动跑");
}
public void move(){
super.move();
autoMove();
}
}public class Client{
public static void main(String[] args){
Car car = new Car();
car.move();
System.out.println("增加新的功能,飞行。。。。");
FlyCar flycar = new FlyCar(car);
flycar.move();
System.out.println("增加新的功能,水里游。。。。");
WaterCar wcar = new WaterCar(flycar);
wcar.move();
}
}两个模式都是为了解决过多子类对象问题,但是他们诱因不一样。
JAVA设计模式(11):结构型-装饰模式(Decorator)
原文地址:http://blog.csdn.net/lovesomnus/article/details/45217071