aiyoudiao aiyoudiao
  • JavaScript
  • Vue
  • React
  • 低代码
  • 线性系统
  • 暂未分类
  • LeetCode
  • 算法
  • 数据结构
  • 设计模式
  • Other
  • PMP
  • Office
  • 面试
  • Bash
  • 流年往事
  • 经验片段
  • 读书杂感
  • 归档
  • 分类
  • 标签
  • 简介
  • 收藏
  • 有趣
  • 文档

码二

扫微信二维码,认识一下码二吧😉。
  • JavaScript
  • Vue
  • React
  • 低代码
  • 线性系统
  • 暂未分类
  • LeetCode
  • 算法
  • 数据结构
  • 设计模式
  • Other
  • PMP
  • Office
  • 面试
  • Bash
  • 流年往事
  • 经验片段
  • 读书杂感
  • 归档
  • 分类
  • 标签
  • 简介
  • 收藏
  • 有趣
  • 文档
  • LeetCode

  • 算法

  • 数据结构

  • 设计模式

    • 浅聊设计理念
    • 谈一谈设计原则
    • 工厂方法模式
    • 抽象工厂模式
    • 建造者模式
    • 原型模式
    • 单例模式
    • 桥接模式
      • 前言
      • 桥接模式
    • 代理模式
    • 装饰器模式
    • 适配器模式
    • 享元模式
    • 组合模式
    • 外观模式
    • 观察者模式
    • 模板方法模式
    • 策略模式
    • 职责链模式
    • 状态模式
    • 迭代器模式
    • 访问者模式
    • 备忘录模式
    • 命令模式
    • 解释器模式
    • 中介者模式
  • Other

  • vue3设计与实现

  • 算法与设计
  • 设计模式
aiyoudiao
2022-02-21

桥接模式

# 前言

桥接模式属于结构型模式,这个类型的设计模式总结出了 类、对象组合后的经典结构,将类、对象的结构和使用解耦了,花式的去借用对象。

# 桥接模式

应用场景:一个产品有多个维度的变化时,这个时候组合的效果高于继承时,可以将多个维度抽离出来,让不同的维度抽象成不同的功能,并且这样的功能还能够独自扩展,最终通过借用的方式组合它们到一起,从而达到抽象与实现解耦的目的。

理解:类、对象的结构和使用解耦,可以通过借用的方式,任意的切换功能,只要组织好结构即可。功能类可以自己独立扩展,比如爱情的滋味应该也有很多种,酸甜苦辣咸等等等。然后产品也能有很多种,比如不同的性别除了男人和女人,还可以是别的性别,哈哈哈,人类似乎有56种性别嘞。和建造者模式不同的是,它不是用于创建对象,而是用特定的结构来扩展功能,并让抽象和具体的实现解耦。比如 约会 与 爱情的感受、性别 与 不同性别的人。都是通过特定的结构组织方式来完成的。

namespace struct_mode_01 {

    // 约会
    interface IDating {
        say(): string
    }

    // 功能类

    class GoodLove implements IDating {
        say(): string {
            return '【甜的爱情】留在你身边,陪你。人间相伴,共赴天涯海角。'
        }
    }

    class BadLove implements IDating {
        say(): string {
            return "【变质的爱情】太差了,有机会换一个吧。分手前得搞点实惠的,那房子不错。"
        }
    }

    // 性别
    interface IGender {
        setFeel(feel: IDating): IGender
        love(): IGender
    }

    // 产品类

    class Man implements IGender {
        
        private feel: IDating

        constructor(feel: IDating) {
            this.feel = feel
        }

        setFeel(feel: IDating): IGender {
            this.feel = feel

            return this
        }

        love(): IGender {
            console.log(`男人觉得:${this.feel.say()}`)

            return this
        }
    }

    class Woman implements IGender {

        private feel: IDating

        constructor(feel: IDating) {
            this.feel = feel
        }

        setFeel(feel: IDating): IGender {
            this.feel = feel

            return this
        }

        love(): IGender {
            console.log(`女人觉得:${this.feel.say()}`)

            return this
        }
    }

    new Man(new GoodLove()).love().setFeel(new BadLove()).love()
    new Woman(new GoodLove()).love().setFeel(new BadLove()).love()

}
#设计模式
上次更新时间: 10年18月2023日 01时57分53秒
单例模式
代理模式

← 单例模式 代理模式 →

最近更新
01
01.数据结构导论一览.md
10-16
02
30.2023年06月04日.md
06-04
03
08.与测量相关.md
05-06
更多文章>
Theme by Vdoing | Copyright © 2017-2023 aiyoudiao 码二 备案号: 鄂ICP备2022002654号-1