Golang设计模式中的桥接模式详细讲解

目录
  • 桥接模式
  • 概念示例

桥接模式

桥接是一种结构型设计模式, 可将业务逻辑或一个大类拆分为不同的层次结构, 从而能独立地进行开发。

层次结构中的第一层 (通常称为抽象部分) 将包含对第二层 (实现部分) 对象的引用。 抽象部分将能将一些 (有时是绝大部分) 对自己的调用委派给实现部分的对象。 所有的实现部分都有一个通用接口, 因此它们能在抽象部分内部相互替换。

概念示例

假设你有两台电脑: 一台 Mac 和一台 Windows。 还有两台打印机: 爱普生和惠普。 这两台电脑和打印机可能会任意组合使用。 客户端不应去担心如何将打印机连接至计算机的细节问题。

如果引入新的打印机, 我们也不会希望代码量成倍增长。 所以, 我们创建了两个层次结构, 而不是 2x2 组合的四个结构体:

抽象层: 代表计算机

实施层: 代表打印机

这两个层次可通过桥接进行沟通, 其中抽象层 (计算机) 包含对于实施层 (打印机) 的引用。 抽象层和实施层均可独立开发, 不会相互影响。

computer.go: 抽象

package main
type Computer interface {
    Print()
    SetPrinter(Printer)
}

mac.go: 精确抽象

package main
import "fmt"
type Mac struct {
    printer Printer
}
func (m *Mac) Print() {
    fmt.Println("Print request for mac")
    m.printer.PrintFile()
}
func (m *Mac) SetPrinter(p Printer) {
    m.printer = p
}

windows.go: 精确抽象

package main
import "fmt"
type Windows struct {
    printer Printer
}
func (w *Windows) Print() {
    fmt.Println("Print request for windows")
    w.printer.PrintFile()
}
func (w *Windows) SetPrinter(p Printer) {
    w.printer = p
}

printer.go: 实施

package main
type Printer interface {
    PrintFile()
}

epson.go: 具体实施

package main
import "fmt"
type Epson struct {
}
func (p *Epson) PrintFile() {
    fmt.Println("Printing by a EPSON Printer")
}

hp.go: 具体实施

package main
import "fmt"
type Hp struct {
}
func (p *Hp) PrintFile() {
    fmt.Println("Printing by a HP Printer")
}

main.go: 客户端代码

package main
import "fmt"
func main() {
    hpPrinter := &Hp{}
    epsonPrinter := &Epson{}
    macComputer := &Mac{}
    macComputer.SetPrinter(hpPrinter)
    macComputer.Print()
    fmt.Println()
    macComputer.SetPrinter(epsonPrinter)
    macComputer.Print()
    fmt.Println()
    winComputer := &Windows{}
    winComputer.SetPrinter(hpPrinter)
    winComputer.Print()
    fmt.Println()
    winComputer.SetPrinter(epsonPrinter)
    winComputer.Print()
    fmt.Println()
}

output.txt: 执行结果

Print request for mac
Printing by a HP Printer

Print request for mac
Printing by a EPSON Printer

Print request for windows
Printing by a HP Printer

Print request for windows

到此这篇关于Golang设计模式中的桥接模式详细讲解的文章就介绍到这了,更多相关Go桥接模式内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Golang设计模式工厂模式实战写法示例详解

    目录 拆出主板 工厂模式流程 代码实战 抽象能力,定义接口 实现工厂,支持注册和获取实现 主流程只依赖接口完成 扩展 => 适配器,实现接口 注册适配器到工厂里 小结 拆出主板 今天带大家看一下怎么用 Go 写工厂模式的代码,我们来学习一个实战案例.这个写法笔者日常经常使用,能够很有效地帮助大家实现 Separation of Concerns. 主板就是一个程序的主流程.比如我们要基于一份学习资料来消化,吸收知识.我们可能有下面几步流程: 准备好笔记本: 打开资料: 阅读资料内容,思考并记录关

  • Golang设计模式之适配器模式详细讲解

    目录 适配器模式 概念示例 适配器模式 适配器是一种结构型设计模式, 它能使不兼容的对象能够相互合作. 适配器可担任两个对象间的封装器, 它会接收对于一个对象的调用, 并将其转换为另一个对象可识别的格式和接口. 概念示例 这里有一段客户端代码, 用于接收一个对象 (Lightning 接口) 的部分功能, 不过我们还有另一个名为 adaptee 的对象 (Windows 笔记本), 可通过不同的接口 (USB 接口) 实现相同的功能 这就是适配器模式发挥作用的场景. 我们可以创建这样一个名为 a

  • Go设计模式原型模式考查点及使用详解

    目录 前言 什么是原型模式 使用原型模式的目的 使用场景 利用原型模式实现文档树 总结 前言 如果一个类的有非常多的属性,层级还很深.每次构造起来,不管是直接构造还是用建造者模式,都要对太多属性进行复制,那么有没有一种好的方式让我们创建太的时候使用体验更好一点呢? 今天的文章里就给大家介绍一种设计模式,来解决这个问题. 这篇内容要说的是创造型设计模式里的原型模式,如果写过点 JS 代码的话,大家可能听说过原型链这么个东西,原型模式在 JavaScript 实现里确实广泛应用,它那个面向对象跟 J

  • Golang设计模式之原型模式详细讲解

    目录 原型模式 概念示例 原型模式 原型是一种创建型设计模式, 使你能够复制对象, 甚至是复杂对象, 而又无需使代码依赖它们所属的类. 所有的原型类都必须有一个通用的接口, 使得即使在对象所属的具体类未知的情况下也能复制对象. 原型对象可以生成自身的完整副本, 因为相同类的对象可以相互访问对方的私有成员变量. 概念示例 让我们尝试通过基于操作系统文件系统的示例来理解原型模式. 操作系统的文件系统是递归的: 文件夹中包含文件和文件夹, 其中又包含文件和文件夹, 以此类推. 每个文件和文件夹都可用一

  • Go语言实现23种设计模式的使用

    目录 创建型模式 工厂方法模式 Factory Method 问题 解决 抽象工厂模式 Abstract Factory 问题 解决 建造者模式 Builder 问题 解决 原型模式 Prototype 问题 解决 单例模式 Singleton 问题 解决 结构型模式 适配器模式 Adapter 问题 解决 桥接模式Bridge 问题 解决 对象树模式Object Tree 问题 解决 装饰模式Decorator 问题 解决 外观模式Facade 问题 解决 享元模式 Flyweight 问题

  • Golang设计模式中的桥接模式详细讲解

    目录 桥接模式 概念示例 桥接模式 桥接是一种结构型设计模式, 可将业务逻辑或一个大类拆分为不同的层次结构, 从而能独立地进行开发. 层次结构中的第一层 (通常称为抽象部分) 将包含对第二层 (实现部分) 对象的引用. 抽象部分将能将一些 (有时是绝大部分) 对自己的调用委派给实现部分的对象. 所有的实现部分都有一个通用接口, 因此它们能在抽象部分内部相互替换. 概念示例 假设你有两台电脑: 一台 Mac 和一台 Windows. 还有两台打印机: 爱普生和惠普. 这两台电脑和打印机可能会任意组

  • Golang设计模式中抽象工厂模式详细讲解

    目录 抽象工厂模式 概念示例 抽象工厂模式 抽象工厂模式是一种创建型设计模式, 它能创建一系列相关的对象, 而无需指定其具体类. 抽象工厂定义了用于创建不同产品的接口, 但将实际的创建工作留给了具体工厂类. 每个工厂类型都对应一个特定的产品变体. 在创建产品时, 客户端代码调用的是工厂对象的构建方法, 而不是直接调用构造函数 (new操作符). 由于一个工厂对应一种产品变体, 因此它创建的所有产品都可相互兼容. 客户端代码仅通过其抽象接口与工厂和产品进行交互. 该接口允许同一客户端代码与不同产品

  • Java结构型设计模式之桥接模式详细讲解

    目录 桥接模式 概述 应用场景 优缺点 主要角色 桥接模式的基本使用 创建实现角色 创建具体实现角色 创建抽象角色 创建修正抽象角色 客户端调用 桥接模式实现消息发送 创建实现角色 创建具体实现角色 创建抽象角色 创建修正抽象角色 客户端调用 桥接模式 概述 桥接模式(Bridge Pattern)也称为桥梁模式.接口(Interfce)模式或柄体(Handle and Body)模式,属于结构型模式. 它是将抽象部分与它的具体实现部分分离,使它们都可以独立地变化. 桥接模式主要目的是通过组合的

  • Java设计模式中的桥接模式

    目录 模式介绍 UML类图 桥接模式案例 桥接模式的注意事项和细节 常见的应用场景 模式介绍 桥接模式(Bridge模式)是指:将实现与抽象放在两个不同的类层次中,使两个层次可以独立改变. 是一种结构型设计模式. Bridge模式基于类的最小设计原则,通过使用封装.聚合及继承等行为让不同的类承担不同的职责.它的主要特点是把抽象(Abstraction)与行为实现(Implementation)分离开来,从而可以保持各部分的独立性以及应对他们的功能扩展. UML类图 类图说明: Client类:桥

  • Java设计模式中的七大原则详细讲解

    目录 1.开闭原则(软件设计第一原则) 2.依赖倒置原则 3.里氏替换原则 4.合成复用原则 5.接口隔离原则 6.迪米特法则 7.单一职责原则 设计模式要进行共性与可变性的分析,对共性进行抽象,同时对可变性进行封装,没有完美的设计模式,作为一名开发者要懂得取舍,触类旁通,开发出高内聚.低耦合.灵活性更高的软件产品 1.开闭原则(软件设计第一原则) 定义:一个软件实体应该对扩展开放,对修改关闭,即在不修改源代码的基础上扩展软件功能 本质思想: 以抽象来固定不变的东西(把固定不变的抽出来) 使用具

  • C++设计模式中的工厂模式详细介绍

    目录 1. 简单工厂模式 2. 工厂方法模式 3. 抽象工厂模式 1. 简单工厂模式 简单工厂模式(Simple Factory Pattern): 是指定义一个工厂类,工厂类中实现一个方法,此方法根据不同的参数返回不同的类,UML类图如下所示: 代码如下: #include <iostream> using namespace std; class Product { public: ~Product() {} // 纯虚函数 virtual void Create(string conte

  • 深入解析iOS应用开发中对设计模式中的桥接模式的使用

    引言 在项目开发中,我们会遇到这样的一种场景:某些类型由于自身的逻辑,往往具有两个或多个维度的变化,比如说大话设计模式书中所说的手机,它有两个变化的维度:一是手机的品牌,可能有三星.苹果等:二是手机上的软件,可能有QQ.微信等.如何应对这种"多维度的变化"?怎样利用面向对象的技术来使得该类型能够轻松的沿着多个方向进行变化,而又不引入额外的复杂度?这就是本章桥接模式所要解决的问题. 何为桥接模式? 桥接模式的目的是把抽象层次结构从其实现中分离出来,使其能够独立变更.抽象层定义了供客户端使

  • 深入解析C#设计模式中对桥接模式的具体运用

    这里以电视遥控器的一个例子来引出桥接模式解决的问题,首先,我们每个牌子的电视机都有一个遥控器,此时我们能想到的一个设计是--把遥控器做为一个抽象类,抽象类中提供遥控器的所有实现,其他具体电视品牌的遥控器都继承这个抽象类,具体设计类图如下: 这样的实现使得每部不同型号的电视都有自己遥控器实现,这样的设计对于电视机的改变可以很好地应对,只需要添加一个派生类就搞定了,但随着时间的推移,用户需要改变遥控器的功能,如:用户可能后面需要对遥控器添加返回上一个台等功能时,此时上面的设计就需要修改抽象类Remo

  • Java超详细讲解设计模式中的命令模式

    目录 介绍 实现 个人理解:把一个类里的多个命令分离出来,每个类里放一个命令,实现解耦合,一个类只对应一个功能,在使用命令时由另一个类来统一管理所有命令. 缺点:如果功能多了就会导致创建的类的数量过多 命令模式(Command Pattern)是⼀种数据驱动的设计模式,它属于行为型模式.请求以命令的形式包裹在对象中,并传给调⽤对象.调⽤对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执⾏命令. 介绍 意图:将⼀个请求封装成⼀个对象,从⽽使您可以⽤不同的请求对客户进⾏参数化.

随机推荐