设计模式之装饰模式

109 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第3天,点击查看活动详情

前言

高楼大厦并非一日之功,打牢基础才能应对变化。本期为大家讲解装饰设计模式, 装饰设计模式主要表达的点在装饰这一用途,他可以应对复杂的封装变化。

装饰设计理解

装饰设计大家可以把他理解一件又一件的外套,穿上外套你就获得了保暖功能,脱掉你就没有保暖,穿上短袖获得好看,又或者汽车,把装饰模式类比到汽车上面,你给汽车增加配件,汽车就会增加对应的功能,这就是装饰模式。

在装饰模式中,我们最需要记住的就是我需要装饰谁,这个道理。需要装饰的对象是经常被搞错的一个点。

装饰模式业务场景

装饰模式可以放在短信通知这一场景上面,那么我需要装饰谁呢?那就得看你需要做什么,业务说明要通知,通知这个动作,他有很多个通知,什么短信通知,小程序通知,电话通知等等,这时候就可以对通知这个动作进行封装装饰,使用小程序装饰器,电话装饰器来修饰通知。

装饰模式代码

这里我们使用ca小车来进行功能扩展演示。


        Car car = new SimpleCar();

        //加装了车衣

        car = new CYCarDecorator(car);

/**
 * 具体装饰器(ConcreteDecorator)角色,车衣装饰器类,
 */

public class CYCarDecorator extends CarDecorator {

    private String description = "车衣";

//这里是为了可以传入不同的车来获取不同的能力

    public CYCarDecorator(Car car){

        super(car);

    }



    @Override

    public String getDescription() {

        return super.getDescription() + " + "+ description;

    }


    /**

     * 车衣价格

     * @return

     */

    @Override

    public int getPrice() {

        return super.getPrice() + 3;

    }

}

这是360度全息影像功能 另一个装饰器

/**
 * 具体装饰器(ConcreteDecorator)角色,360度全景影像装饰器类,QJ360是360度全景影像的缩写
 */

public class QJ360CarDecorator extends CarDecorator {

    private String description = "360度全景影像";


    public QJ360CarDecorator(Car car){

        super(car);

    }



    @Override

    public String getDescription() {

        return super.getDescription() + " + "+ description;

    }

    /**
     * 360度全景影像
     * @return
     */

    @Override

    public int getPrice() {

        return super.getPrice() + 1;

    }

}