IT铁人DAY 15-Bridge 桥接模式

  今天要介绍的Bridge Pattern,当初在学习的时候就觉得这个 Pattern 很有意思,实用性感觉非常高,现在就带你来认识它吧!


问题情境与解析

  现在有个交通工具的类别,底下的子类有汽车和机车,你希望加入道路行为的元素去建构不同的交通工具,并将各种道路行为汽车和机车创造了类别,像是会走上高架的机车与只会走平面道路的机车等等,之後如果要新增其他交通工具的子类别,比如说公车、脚踏车等等,就会需要分别对不同道路行为的交通工具塑造子类别,整个程序架构就会往横向不断发展,看起来会很糟。

  而桥接模式会将交通工具与道路规则给抽离,从原本的继承关系到聚合关系来解决问题。也就是你可以取一个交通工具的类别,而它的道路行为就用引用的方式来实现,而不是封装所有的状态和行为在一个类别中。

  从上述了例子,我们可以发现,桥接模式把「抽象」与「实作」分开来,并让「抽象」拥有「实作」,形成一个聚合的关系,而这样的关系也被视为桥接模式定义的一部分。

Class Diagram

https://ithelp.ithome.com.tw/upload/images/20210930/20140743UFkw1KOcMy.png

Skeleton Code

abstract class Abstractation {
    protected Implementer impl;

    protected Abstractation(Implementer impl) {
        this.impl = impl;
    }

    abstract public Type function();
}

class RefinedAbstractation extends Abstractation {
    public RefinedAbstractation(Implementer impl) {
        super(impl);
    }

    public Type function() {
        impl.method();
        //other operation
    }
}

interface Implementer {
    abstract public Type method();
}

class ConcreteImplementer implements Implementer {	
    public Type method() {
        // Do some Work
    }
}

  使用桥接模式就可以将抽象与实作分离,让两者可以独立变化,这也意味着开发者也方便分工。如果你想要组织和划分具有某些功能(如道路行为)的多个变体(如交通工具),就可以使用桥接模式,来帮助你的程序能够独立的加入新的抽象和实作,并且使「抽象」与「实作」更专於自己本身的逻辑与细节,更加符合Single Responsibility Principle单一职责原则


除此之外,也欢迎大家走走逛逛关於我们团队夥伴的文章

lu23770127 - SASS 基础初学三十天

10u1 - 糟了!是世界奇观!

juck30808 - Python - 数位行销分析与 Youtube API 教学

SiQing47 - 前端?後端?你早晚都要全端的,何不从现在开始?


<<:  Day 18 阿里云快速建立跨地区企业网路

>>:  第 15 集:Bootstrap 客制化 Sass 7-1 Pattern

Day4 JS-Object、Prototype与Class(ES6)

今天要稍微跳脱一下下NodeJS,纪录一下基本的JavaScript物件概念,包含Obeject、P...

Day17 - [丰收款] 永丰API虚拟帐户付款与PayToken查询与更新状态

在经过了多日有一天没一天的研究、写Code与写作,今天假日花了一点时间将原本从Jupyter Not...

使用准确的 Microsoft MB-300 考试转储立即成功

似乎没有简单的方法可以通过 Microsoft MB-300 考试。据说这次考试成功的秘诀有三个。有...

Day23 Redis架构实战-Sentinel组态档设定

sentinel.conf # 高可用配置搭配Sentinel机制 ---> Redis (R...

[Angular] Day9. Transforming Data Using Pipes

在上一章中介绍了如何在 template 中插入 component 的变量,而本章节要介绍如何使用...