• 徒手撸设计模式桥接模式


    概念

    桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。

    这种模式涉及到一个作为桥接的接口,使得实体类的功能独立于接口实现类。这两种类型的类可被结构化改变而互不影响。

    我们通过下面的实例来演示桥接模式(Bridge Pattern)的用法。其中,可以使用相同的抽象类方法但是不同的桥接实现类,来画出不同颜色的圆。

    参考连接: https://www.runoob.com/design-pattern/bridge-pattern.html

    代码案例

    公共类

    /**
     * 枚举类
     */
    public enum StuEnum {
        //车子枚举
        CAR("CAR", "汽车"),
        BICYCLE("BICYCLE", "自行车"),
        TRAIN("TRAIN", "火车");
    
        private final String key;
        private final String value;
    
        StuEnum(String key, String value) {
            this.key = key;
            this.value = value;
        }
    
        /**
         * 获取key
         *
         * @return
         */
        public String getKey() {
            return key;
        }
    
        /**
         * 获取value
         *
         * @return
         */
        public String getValue() {
            return value;
        }
    }

    创建生产接口

    /**
     * 生产接口
     */
    public interface ProductionAPI {
        /**
         * 生产车子
         * @return
         */
        public String product();
    }

    创建三个生产接口实现类

    汽车

    /**
     * 生产汽车
     */
    @Service("car")
    @Slf4j
    public class Car implements ProductionAPI {
        @Override
        public String product() {
            return StuEnum.CAR.getValue();
        }
    }

    火车

    /**
     * 生产火车
     */
    @Service("train")
    @Slf4j
    public class Train implements ProductionAPI {
        @Override
        public String product() {
            return StuEnum.TRAIN.getValue();
        }
    }

    自行车

    /**
     * 生产自行车
     */
    @Service("bicycle")
    @Slf4j
    public class Bicycle implements ProductionAPI {
        @Override
        public String product() {
            return StuEnum.BICYCLE.getValue();
        }
    }

    车子抽象类-用于生产不同的车子

    /**
     * 车子生产抽象类
     */
    public abstract class Cars {
        protected ProductionAPI productionAPI;
    
        protected Cars(ProductionAPI productionAPI) {
            this.productionAPI = productionAPI;
        }
    
        public abstract String product();
    }

    上色实现类-用于给生产的车子上色

    /**
     * 上色实现类实现制造实现类
     */
    @Slf4j
    public class Colour extends Cars{
        private  String colour;
    
        /**
         * 上色
         * @param productionAPI
         * @param colour
         */
        public Colour(ProductionAPI productionAPI, String colour) {
            super(productionAPI);
            this.colour = colour;
        }
    
        /**
         * 制造
         * @return
         */
        @Override
        public String product() {
            String product="生产======"+colour+"=================="+productionAPI.product();
            log.info(product);
            return product;
        }
    }

    测试主类

    /**
     * 设计模式控制器
     */
    @RestController
    @RequestMapping("/designPattern")
    @Slf4j
    public class DesignController {
        @Autowired
        private ApplicationContext applicationContext;
    
        @GetMapping("/bridge")
        public ResponseModel bridge(String carType, String colour) {
            ProductionAPI api = null;
            if (StFlag.CAR.equalsIgnoreCase(carType)) {
                api = applicationContext.getBean(carType.toLowerCase(), Car.class);
            } else if (StFlag.TRAIN.equalsIgnoreCase(carType)) {
                api = applicationContext.getBean(carType.toLowerCase(), Train.class);
            } else if (StFlag.BICYCLE.equalsIgnoreCase(carType)) {
                api = applicationContext.getBean(carType.toLowerCase(), Bicycle.class);
            }
            Colour colourNew = new Colour(api, colour);
            String product = colourNew.product();
            return new ResponseModel("桥接模式完成", 200, product);
        }
    }

    测试案例

    桥接模式-白色火车

    桥接模式-黑色自行车

    桥接模式-红色汽车

    carType=Train&colour=白色
    2022-06-20 01:39:54.165 INFO  生产======白色==================火车 【http-nio-8081-exec-1】【Colour:30】
    
    carType=bicycle&colour=黑色
    2022-06-20 01:40:01.608 INFO  生产======黑色==================自行车 【http-nio-8081-exec-10】【Colour:30】
    
    carType=car&colour=红色
    2022-06-20 01:40:04.988 INFO  生产======红色==================汽车 【http-nio-8081-exec-9】【Colour:30】
    
    

     

  • 相关阅读:
    [poj2778]DNA Sequence(AC自动机+矩阵快速幂)
    密码学学习笔记
    [hdu3695]Computer Virus on Planet Pandora(AC自动机)
    [hdu1277]全文检索(AC自动机)
    [hdu3065]病毒侵袭持续中(AC自动机)
    [hdu2896]病毒侵袭(AC自动机)
    lintcode-84-落单的数 III
    lintcode-83-落单的数 II
    lintcode-79-最长公共子串
    lintcode-78-最长公共前缀
  • 原文地址:https://www.cnblogs.com/hikoukay/p/16391988.html
Copyright © 2020-2023  润新知