ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

徒手撸设计模式-装饰器模式

2022-06-25 01:32:15  阅读:368  来源: 互联网

标签:product String Cars 装饰 new 设计模式 public decorator 徒手


概念

装饰器模式(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】

 

标签:product,String,Cars,装饰,new,设计模式,public,decorator,徒手
来源: https://www.cnblogs.com/hikoukay/p/16410620.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有