持续创作,加速成长!这是我参与「掘金日新计划 · 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;
}
}