【设计模式】6、bridge 桥接模式

六、bridge 桥接模式

桥接设计模式

  1. 复杂逻辑拆分:

如果需要完成复杂的逻辑,可以把复杂逻辑设计为接口,内部再拆分为若干接口。这样复杂的逻辑会被拆分开,方便解耦。

例如:如果遥控器控制设备。可以遥控器设计为复杂接口,设备设计为简单接口。遥控器的每个方法都由若干设备接口组成。设备可以有多种实现:如电视、手机等。

  1. 多维,避免组合爆炸:

如果有多个维度,各维度之间可以设计为接口,而不是让组合的数量爆炸。

例如:如果有 mac 和 windows 两种 os,需要分别连接 hp 和 epson 的打印机打印。为了避免实现 2x2 种组合类型(如 mac-hp、mac-epson、windows-hp、windows-epson 等),可以用接口。

6.1 多维:os 和 printer

Go 桥接模式讲解和代码示例

目录层级如下:

06bridge/061osprinter
├── epson_printer.go
├── hp_printer.go
├── mac_os.go
├── os.go
├── os_test.go
├── printer.go
├── readme.md
└── windows_os.go

6.1.1 os.go

package _61osprinter

type os interface {
	Print()
	SetPrinter(p printer)
}

6.1.2 os_test.go

package _61osprinter

import (
	"fmt"
	"testing"
)

/*
=== RUN   TestOsPrint
mac系统
hp打印机

mac系统
爱普生打印机

windows系统
hp打印机

windows系统
爱普生打印机

--- PASS: TestOsPrint (0.00s)
PASS
*/
func TestOsPrint(t *testing.T) {
	hp := &hpPrinter{}
	epson := &epsonPrinter{}

	// mac
	mac := &macOs{}
	mac.SetPrinter(hp)
	mac.Print()
	fmt.Println()

	mac.SetPrinter(epson)
	mac.Print()
	fmt.Println()

	// win
	win := &windowsOs{}
	win.SetPrinter(hp)
	win.Print()
	fmt.Println()

	win.SetPrinter(epson)
	win.Print()
	fmt.Println()
}

6.1.3 os.go

package _61osprinter

type os interface {
	Print()
	SetPrinter(p printer)
}

6.1.4 priner.go

package _61osprinter

type printer interface {
	Print()
}

6.1.5 mac_os.go

package _61osprinter

import "fmt"

type macOs struct {
	printer printer
}

func (o *macOs) Print() {
	fmt.Println("mac系统")
	o.printer.Print()
}

func (o *macOs) SetPrinter(p printer) {
	o.printer = p
}

6.1.6 windows_os.go

package _61osprinter

import "fmt"

type windowsOs struct {
	printer printer
}

func (o *windowsOs) Print() {
	fmt.Println("windows系统")
	o.printer.Print()
}

func (o *windowsOs) SetPrinter(p printer) {
	o.printer = p
}

6.1.7 hp_printer.go

package _61osprinter

import "fmt"

type hpPrinter struct {
}

func (p *hpPrinter) Print() {
	fmt.Println("hp打印机")
}

6.1.8 epson_printer.go

package _61osprinter

import "fmt"

type epsonPrinter struct{}

func (p *epsonPrinter) Print() {
	fmt.Println("爱普生打印机")
}

相关推荐

  1. 设计模式6bridge 模式

    2024-04-21 03:32:04       15 阅读
  2. 设计模式--模式Bridge Pattern)

    2024-04-21 03:32:04       30 阅读
  3. 设计模式——模式Bridge

    2024-04-21 03:32:04       11 阅读
  4. 设计模式-11 - Bridge Method 模式

    2024-04-21 03:32:04       11 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-21 03:32:04       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-21 03:32:04       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-21 03:32:04       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-21 03:32:04       20 阅读

热门阅读

  1. UE5 Prediction 预测

    2024-04-21 03:32:04       12 阅读
  2. 高精度加减乘除

    2024-04-21 03:32:04       13 阅读
  3. Graphql mock 方案

    2024-04-21 03:32:04       14 阅读
  4. fabricjs控制背景图和画布图片展示

    2024-04-21 03:32:04       12 阅读
  5. 【学习心得】Pandas处理缺失值的思路

    2024-04-21 03:32:04       13 阅读
  6. 正则表达式笔记

    2024-04-21 03:32:04       12 阅读
  7. 【代码随想录刷题记录】LeetCode704二分查找

    2024-04-21 03:32:04       13 阅读
  8. 【备忘录】openssl记录

    2024-04-21 03:32:04       16 阅读
  9. openssl3.2 - exp - 用base64后的字符串作为配置项的值

    2024-04-21 03:32:04       15 阅读
  10. 记一次etcd数据恢复

    2024-04-21 03:32:04       14 阅读
  11. Linux 磁盘分区详解以及知识点分解

    2024-04-21 03:32:04       18 阅读
  12. SpringIOC容器Bean对象的实例化模拟

    2024-04-21 03:32:04       17 阅读