Java设计模式之装饰者模式

Java设计模式相关文章

1. Java设计模式之模板模式
2. Java设计模式之策略模式
3. Java设计模式之工厂模式
4. Java设计模式之装饰者模式
5.Java设计模式之单例模式
Java 设计模式源代码,欢迎star
https://github.com/Dylan-haiji/design-pattern

概念

装饰(Decorator)模式的定义:指在不改变现有对象结构的情况下,动态地给该对象增加一些职责(即增加其额外功能)的模式,它属于对象结构型模式。

优缺点

  • 主要优点有:
    a) 采用装饰模式扩展对象的功能比采用继承方式更加灵活。
    b) 可以设计出多个不同的具体装饰类,创造出多个不同行为的组合。
  • 主要缺点是:
    装饰模式增加了许多子类,如果过度使用会使程序变得很复杂。

代码演示

场景设定

装饰者开发介绍在这里 https://github.com/Dylan-haiji/design-pattern/tree/master/decoration-mode

结构图

Java设计模式之装饰者模式_第1张图片

3.1 定义业务接口

public interface ComputerService {

    /**
     * @Description 购买的电脑信息
     * @UserModule: design-pattern     
     * @author Dylan
     * @date 2020/2/3 0003
     * @param [type] 
     * @return com.javayh.dto.ComputerDTO
     */
    ComputerDTO getComputer(String type);
}

3.2 实现业务

public class ComputerServiceImpl implements ComputerService {

    @Override
    public ComputerDTO getComputer(String type) {
        return ComputerDTO.builder().brand(type).cpu(Constant.CPU)
                .graphicsCard("blackmagic eGPU Pro ")
                .nucleus("16")
                .size("17").build();
    }
}

3.3 定义装饰者

public class Decorator implements ComputerService {

    private ComputerService computerService;

    public Decorator(ComputerService computerService) {
        this.computerService = computerService;
    }
    @Override
    public ComputerDTO getComputer(String type) {
        ComputerDTO computer = computerService.getComputer(type);
        computer.setComputerGift(ComputerGift.builder()
                .member("恭喜您已成为本店铂金会员")
                .integral("赠送您10积分")
                .coupon("赠送您一张(30元)店铺统用优惠券").build());
        return computer;
    }
}

3.4 应用

    @GetMapping(value = "/getComputer/{type}")
    public DataResult getComputer(@PathVariable String  type){
        return DecoratorUtils.getType(type);
    }
======
工具

public class DecoratorUtils {
    
    public static DataResult getType(String type){
        Map<String,Integer> map = new HashMap();
        map.put(type,"Mac".equalsIgnoreCase(type)? 1 :("P30".equalsIgnoreCase(type)? 2 :3));
        ComputerService computerService = null;
        Decorator decorator = null;
        ComputerDTO computer = null;
        switch (map.get(type)){
            case 1:
                computerService = new ComputerServiceImpl();
                decorator = new Decorator(computerService);
                computer = decorator.getComputer(type);
                break;
            case 2:
                computerService = new PhoneServiceImpl();
                decorator = new Decorator(computerService);
                computer = decorator.getComputer(type);
                break;
            default:
                break;
        }
        return DataResult.success(computer);
    }
}

3.5 验证

模拟请求 http://localhost:8092/decoration/getComputer/MAC

Java设计模式之装饰者模式_第2张图片

关注 Java有货领取更多资料

联系小编。微信:372787553,带您进群互相学习
左侧小编微信,右侧获取免费资料
在这里插入图片描述

  • Java 设计模式学习代码 https://github.com/Dylan-haiji/design-pattern
  • SpringCloud学习代码: https://github.com/Dylan-haiji/javayh-cloud
  • AlibabaCloud学习代码:https://github.com/Dylan-haiji/javayh-cloud-nacos
  • SpringBoot+Mybatis 多数据源切换:https://github.com/Dylan-haiji/javayh-boot-data-soure
  • Redis、Mongo、Rabbitmq、Kafka学习代码: https://github.com/Dylan-haiji/javayh-middleware
  • SpringBoot+SpringSecurity实现自定义登录学习代码:https://github.com/Dylan-haiji/javayh-distribution

你可能感兴趣的:(设计模式)