今天要介绍的Bridge Pattern,当初在学习的时候就觉得这个 Pattern 很有意思,实用性感觉非常高,现在就带你来认识它吧!
现在有个交通工具的类别,底下的子类有汽车和机车,你希望加入道路行为的元素去建构不同的交通工具,并将各种道路行为汽车和机车创造了类别,像是会走上高架的机车与只会走平面道路的机车等等,之後如果要新增其他交通工具的子类别,比如说公车、脚踏车等等,就会需要分别对不同道路行为的交通工具塑造子类别,整个程序架构就会往横向不断发展,看起来会很糟。
而桥接模式会将交通工具与道路规则给抽离,从原本的继承关系到聚合关系来解决问题。也就是你可以取一个交通工具的类别,而它的道路行为就用引用的方式来实现,而不是封装所有的状态和行为在一个类别中。
从上述了例子,我们可以发现,桥接模式把「抽象」与「实作」分开来,并让「抽象」拥有「实作」,形成一个聚合的关系,而这样的关系也被视为桥接模式定义的一部分。
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单一职责原则。
除此之外,也欢迎大家走走逛逛关於我们团队夥伴的文章
juck30808 - Python - 数位行销分析与 Youtube API 教学
SiQing47 - 前端?後端?你早晚都要全端的,何不从现在开始?
>>: 第 15 集:Bootstrap 客制化 Sass 7-1 Pattern
今天要稍微跳脱一下下NodeJS,纪录一下基本的JavaScript物件概念,包含Obeject、P...
在经过了多日有一天没一天的研究、写Code与写作,今天假日花了一点时间将原本从Jupyter Not...
似乎没有简单的方法可以通过 Microsoft MB-300 考试。据说这次考试成功的秘诀有三个。有...
sentinel.conf # 高可用配置搭配Sentinel机制 ---> Redis (R...
在上一章中介绍了如何在 template 中插入 component 的变量,而本章节要介绍如何使用...