1、模式介绍:
装饰模式是一种结构型设计模式,允许你通过将对象放入包含行为的特殊包装对象中来动态地扩展其功能。它提供了一种灵活的方式来添加功能,避免了创建大量子类的问题。
2、应用场景:
动态添加功能:当需要动态地给一个对象添加功能,而且这些功能可以组合的时候,装饰模式是一个很好的选择。例如,对输入流进行缓冲、加密或压缩操作。
避免子类爆炸:通过装饰模式,可以避免大量子类的创建,每个装饰器类只关注一个特定的功能,使得功能的组合更加灵活。
3、优点:
灵活性:可以动态地添加对象的功能,而不需要修改现有的代码。
避免子类爆炸:避免创建大量扩展类。
单一职责原则:每个装饰器只关注一个功能,符合单一职责原则。
4、缺点:
复杂性增加:因为装饰模式会增加许多小类和对象,可能会使设计更加复杂。
初学者理解困难:对于初学者来说,理解装饰模式可能需要一定的时间。
5、代码实现:
/*** 车品牌接口** @author FM_南风* @date 2024/7/2 13:16*/
public interface Car {void assemble();
}/*** 基础品牌车** @author FM_南风* @date 2024/7/2 13:16*/
public class BasicCar implements Car{@Overridepublic void assemble() {System.out.print("Basic Car.");}
}/*** 装饰** @author FM_南风* @date 2024/7/2 13:17*/
public class CarDecorator implements Car{protected Car decoratedCar;public CarDecorator(Car decoratedCar) {this.decoratedCar = decoratedCar;}public void assemble() {this.decoratedCar.assemble();}
}/*** 普通品牌车** @author FM_南风* @date 2024/7/2 13:17*/
public class GeneralCar extends CarDecorator{public GeneralCar(Car decoratedCar) {super(decoratedCar);}@Overridepublic void assemble() {super.assemble();System.out.print("添加一个普通品牌车");}
}/*** 奢侈品牌车** @author FM_南风* @date 2024/7/2 13:17*/
public class LuxuryCar extends CarDecorator{public LuxuryCar(Car decoratedCar) {super(decoratedCar);}@Overridepublic void assemble() {super.assemble();System.out.print("添加一个奢侈品牌车");}
}/*** 应用** @author FM_南风* @date 2024/7/2 13:19*/
public class DecoratorClient {public static void main(String[] args) {Car sportsCar = new GeneralCar(new BasicCar());sportsCar.assemble();System.out.println("");Car sportsLuxuryCar = new GeneralCar(new LuxuryCar(new BasicCar()));sportsLuxuryCar.assemble();}
}