动态的为一个对象增加新的功能。
装饰模式是一种用于代替继承的技术,无须通过继承增加之类就能扩展对象的新功能。
使用对象的关联关系代替继承关系,更加灵活,同时避免类型体系的快速膨胀。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