首先,定义一个抽象的汽车类 Car,该类包含获取汽车信息和价格的方法。
接下来,我们创建一个具体实现类 BaseCar,用于表示一辆基础汽车,例如特斯拉。该类实现了获取汽车信息和价格的方法。
然后,我们创建一个装饰类 CarDecorator,该类继承自 Car 类,并在其构造函数中接收一个 Car 类对象作为参数。在该装饰类中,我们重写了获取汽车信息和价格的方法,以便为原有汽车提供额外功能。
通过这种方式,我们可以创建多个装饰类,例如 NavigationDecorator 和 SoundDecorator,分别用于为汽车添加导航和音响功能。这些装饰类继承自 CarDecorator 类,并在其构造函数中接收一个 Car 类对象作为参数。同样地,我们重写了获取汽车信息和价格的方法,以便为原有汽车提供额外功能。
最后,我们可以通过组合使用多个装饰类,为一辆汽车添加多种功能。例如,我们可以先为一辆基础汽车添加导航功能,然后再为其添加音响功能。这样,我们可以在不改变原有汽车类结构的前提下,动态地扩展其功能。
装饰器模式的优点包括:装饰类和被装饰类可以独立发展,不会相互耦合;装饰模式可以作为继承的一个替代模式,动态增加或撤销功能;缺点是多层装饰可能使代码变得复杂。
装饰器模式适用于需要扩展类功能或动态增加功能的场景。它还可以替代继承,为类提供更加灵活的扩展方式。