博客
关于我
设计模式之桥接模式
阅读量:660 次
发布时间:2019-03-15

本文共 1930 字,大约阅读时间需要 6 分钟。

桥接模式简介

桥接模式(Bridge Pattern)将抽象部分与它的实现部分分离,使它们都可以独立地变化。这种设计模式通过抽象和实现之间的聚合关系,避免了强耦合的继承关系。它不仅能够满足抽象部分的变化需求,还能在不影响现有功能的情况下扩展新的实现方式。

桥接模式的实例讲解

在电子商城中,用户需要根据不同的分类方式(品牌、场景)进行商品筛选。传统的继承方式会在类结构中建立紧密的依赖关系,且难以应对类别的动态变化。例如,当品牌或场景不断扩展时,现有的类结构会变得难以维护。

不同分类方式的耦合问题

  • 按品牌分类:如果只检索耐克品牌,系统需要通过继承实现不同的品牌逻辑。每新增一个品牌,都意味着增加一个子类,违反了开放-封闭原则。
  • 按穿衣场景分类:如果按应用场景分类(如运动服、休闲服),同样需要子类继承父类逻辑,不易扩展。
  • 这些情况表明,继承关系的复用性较差,难以满足灵活性和扩展性的需求。因此,我们需要寻找一种可以在运行时灵活切换的分类方式,这就是桥接模式的应用场景。

    桥接模式的分类实现

  • 定义抽象层:创建抽象类Scene,提供通用的分类逻辑。
  • 具体实现类:为运动服和休闲服分别创建实现类SportSceneCasualScene,各自实现不同的分类逻辑。
  • 桥接连接:定义品牌抽象类Brand和其实现类(如AdidasClothesNikeClothes)。每个品牌通过聚合引入所需的场景类型。
  • 代码实现

    // Abstraction(抽象)层public abstract class Scene {    public abstract void sort();}// Implementation(实现)层public class SportScene extends Scene {    @Override    public void sort() {        System.out.println("按照运动服分类");    }}public class CasualScene extends Scene {    @Override    public void sort() {        System.out.println("按照休闲服分类");    }}// Abstraction(抽象)层public abstract class Brand {    protected Scene scene;    public void setScene(Scene scene) {        this.scene = scene;    }    public abstract void sort();}// Implementation(实现)层public class AdidasClothes extends Brand {    @Override    public void sort() {        scene.sort();    }}public class NikeClothes extends Brand {    @Override    public void sort() {        scene.sort();    }}// 使用示例public class Client {    public static void main(String[] args) {        Brand adidas = new AdidasClothes();        adidas.setScene(new SportScene());        adidas.sort();        adidas.setScene(new CasualScene());        adidas.sort();        Brand nike = new NikeClothes();        nike.setScene(new SportScene());        nike.sort();        nike.setScene(new CasualScene());        nike.sort();    }}

    桥接模式的优点

  • 抽象与实现分离:通过聚合关系,避免直接依赖具体实现,提高系统灵活性。
  • 良好的扩展性:不同分类方式互不影响,可以随时增加新的分类逻辑。
  • 总结

    桥接模式通过抽象和实现的分离,以及聚合关系的使用,有效解决了多种分类需求的耦合问题。在需要灵活扩展系统功能时,建议采用桥接模式设计,以提高系统的可维护性和扩展性。

    转载地址:http://slfqz.baihongyu.com/

    你可能感兴趣的文章
    解决微信小程序项目导入的问题:app.json 未找到、 __wxConfig is not defined
    查看>>
    非迅捷|PDF、Word、PPT、Excel、图片等互相在线转换:免费、简单、快速、零错误、无套路
    查看>>
    PyCharm配置anaconda环境
    查看>>
    Java面试题整理,闭关在家37天“吃透”这份345页PDF,纯干货
    查看>>
    word文档手写字母总会大写问题
    查看>>
    Spring 和 DI 依赖注入
    查看>>
    laravel server error 服务器内部错误
    查看>>
    iJ配置Maven环境详解
    查看>>
    面试题 08.01. 三步问题
    查看>>
    剑指 Offer 11. 旋转数组的最小数字
    查看>>
    作为我的第一篇csdn博客吧
    查看>>
    一道简单的访问越界、栈溢出pwn解题记录
    查看>>
    响应的HTTP协议格式+常见的响应码
    查看>>
    关于Linux系统中touch命令的说明
    查看>>
    将windows里的内容直接复制粘贴到ubuntu,提高效率
    查看>>
    [日常] PHP与Mysql测试kill慢查询并检验PDO的错误模式
    查看>>
    [PHP] error_reporting(0)可以屏蔽Fatal error错误
    查看>>
    thinkphp 的一些重要知识点
    查看>>
    Java学习第二章——Java基本语句
    查看>>
    遇到问题之-yum update无法连接镜像问题解决
    查看>>