ICode9

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

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

2022-06-20 02:31:51  阅读:157  来源: 互联网

标签:product return String 桥接 colour 设计模式 public 徒手


概念

桥接(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】

 

 


 

标签:product,return,String,桥接,colour,设计模式,public,徒手
来源: https://www.cnblogs.com/hikoukay/p/16391988.html

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

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

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

ICode9版权所有