java设计模式(八)装饰模式(Decorator Pattern)

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{
    @Override
    public 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);
    }

    @Override
    public 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);
    }
    @Override
    public 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();
    }
}

6、结果展示:

  • 17
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值