概念
装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。
这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。
我们通过下面的实例来演示装饰器模式的用法。其中,我们将把一个形状装饰上不同的颜色,同时又不改变形状类。
参考链接: https://www.runoob.com/design-pattern/decorator-pattern.html
代码案例
新增车子接口
- /**
- * 生产车子接口
- */
- public interface Cars {
- String product();
- }
复制代码
三个实现类
自行车
- /**
- * 生产自行车
- */
- @Slf4j
- public class Bicycle implements Cars {
- @Override
- public String product() {
- log.info("生产自行车");
- return "自行车";
- }
- }
复制代码
汽车
- /**
- * 生产汽车
- */
- @Slf4j
- public class Car implements Cars {
- @Override
- public String product() {
- log.info("生产汽车");
- return "汽车";
- }
- }
复制代码
车子装饰器
- /**
- * 车子装饰类
- */
- @Slf4j
- public abstract class CarsDecorator implements Cars {
- protected Cars decoratorCars;
- public CarsDecorator(Cars decoratorCars) {
- this.decoratorCars = decoratorCars;
- }
- @Override
- public String product() {
- return decoratorCars.product();
- }
- }
复制代码
颜色装饰器
- /**
- * 土豪金色车子装饰器
- */
- public class GoldenCarsDecorator extends CarsDecorator {
- public GoldenCarsDecorator(Cars decoratorCars) {
- super(decoratorCars);
- }
- @Override
- public String product() {
- String product = decoratorCars.product();
- return setColour(decoratorCars)+"----"+product;
- }
- public String setColour(Cars decoratorCars){
- decoratorCars.product();
- return "土豪金色";
- }
- }
复制代码
测试主类
- /**
- * 设计模式控制器
- */
- @RestController
- @RequestMapping("/designPattern")
- @Slf4j
- public class DesignController {
- @GetMapping("/decorator")
- public ResponseModel decorator() {
- com.koukay.student.design.decorator.Cars bicycle= new com.koukay.student.design.decorator.impl.Bicycle();
- CarsDecorator cdCar = new GoldenCarsDecorator(new com.koukay.student.design.decorator.impl.Car());
- CarsDecorator cdBicycle = new GoldenCarsDecorator(new com.koukay.student.design.decorator.impl.Bicycle());
- com.koukay.student.design.decorator.Cars cdCarCars = new GoldenCarsDecorator(new com.koukay.student.design.decorator.impl.Car());
- com.koukay.student.design.decorator.Cars cdBicycleCars = new GoldenCarsDecorator(new com.koukay.student.design.decorator.impl.Bicycle());
- String bicyclePS = bicycle.product();
- String CarD = cdCar.product();
- String bicycleD = cdBicycle.product();
- String carP = cdCarCars.product();
- String bicycleP = cdBicycleCars.product();
- LinkedHashMap map= new LinkedHashMap();
- map.put("bicyclePS",bicyclePS);
- map.put("CarD",CarD);
- map.put("bicycleD",bicycleD);
- map.put("carP",carP);
- map.put("bicycleP",bicycleP);
- return new ResponseModel("装饰器模式完成", 200, map);
- }
- }
复制代码
测试案例

- 2022-06-25 01:05:47.315 INFO 生产自行车 【http-nio-8081-exec-7】【Bicycle:13】
- 2022-06-25 01:05:47.316 INFO 生产汽车 【http-nio-8081-exec-7】【Car:13】
- 2022-06-25 01:05:47.317 INFO 生产汽车 【http-nio-8081-exec-7】【Car:13】
- 2022-06-25 01:05:47.326 INFO 生产自行车 【http-nio-8081-exec-7】【Bicycle:13】
- 2022-06-25 01:05:47.328 INFO 生产自行车 【http-nio-8081-exec-7】【Bicycle:13】
- 2022-06-25 01:05:47.328 INFO 生产汽车 【http-nio-8081-exec-7】【Car:13】
- 2022-06-25 01:05:47.328 INFO 生产汽车 【http-nio-8081-exec-7】【Car:13】
- 2022-06-25 01:05:47.329 INFO 生产自行车 【http-nio-8081-exec-7】【Bicycle:13】
- 2022-06-25 01:05:47.329 INFO 生产自行车 【http-nio-8081-exec-7】【Bicycle:13】
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |