装饰模式概念:动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活(大话设计模式)
在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。(百度百科)
俗话说“人靠衣装马靠鞍”,漂亮得体的装扮不仅能提升形象,还能提高竞争力。
在程序设计中,同样可以通过装饰一个类,增强它的功能。所谓的装饰设计模式,就是通过包装一个类,动态地为它增加功能的一种设计模式。
程序如下:
class Car {
public String carName;
public Car(String carName) {
this.carName = carName;
}
public void show() {
System.out.println("我是"+carName+"具有基本功能");
}
}
class RadarCar {
public Car myCar;
public RadarCar(Car myCar) { //通过构造方法接收被包装的对象
this.myCar = myCar;
}
public void show() {
myCar.show();
System.out.println("具有倒车雷达功能"); //实现功能增强
}
}
public class test {
public static void main(String[] args) {
Car benz = new Car("Benz");
System.out.println("包装前:");
benz.show();
RadarCar radar_benz = new RadarCar(benz);
System.out.println("包装后:");
radar_benz.show();
}
}
运行结果:
我们看到,RadarCar类对类Car实现了包装,在不使用继承的情况下,为它增加了另外一个雷达功能。
装饰器模式的应用场景:
1、需要扩展一个类的功能。
2、动态的为一个对象增加功能,而且还能动态撤销。(继承不能做到这一点,继承的功能是静态的,不能动态增删。)