美文网首页
桥接模式

桥接模式

作者: bocsoft | 来源:发表于2019-02-01 15:47 被阅读0次

Bridge模式基于类的最小设计原则,通过使用封装、聚合及继承等行为让不同的类承担不同的职责。
它的主要特点是把抽象(Abstraction)与行为实现(Implementation)分离开来,从而可以保持各部分的独立性以及应对他们的功能扩展

package bridge

//Bridge模式基于类的最小设计原则,通过使用封装、聚合及继承等行为让不同的类承担不同的职责。
//它的主要特点是把抽象(Abstraction)与行为实现(Implementation)分离开来,从而可以保持各部分的独立性以及应对他们的功能扩展

//抽象接口
type DisplayImpl interface {
    rawOpen() string
    rawPrint() string
    rawClose() string
}

//字符串展示结构体
type StringDisplayImpl struct {
    str string
}

//实现DispalyImpl接口:行为实现
func (self *StringDisplayImpl) rawOpen() string {
    return self.printLine()
}
func (self *StringDisplayImpl) rawPrint() string {
    return "|" + self.str + "|\n"
}

func (self *StringDisplayImpl) rawClose() string {
    return self.printLine()
}
func (self *StringDisplayImpl) printLine() string {
    str := "+"
    for _, _ = range self.str {
        str += string("-")
    }
    str += "+\n"
    return str
}

//通过聚合实现抽象和行为实现的分离
type DefaultDisplay struct {
    impl DisplayImpl
}

func (self *DefaultDisplay) open() string {
    return self.impl.rawOpen()
}
func (self *DefaultDisplay) print() string {
    return self.impl.rawPrint()
}

func (self *DefaultDisplay) close() string {
    return self.impl.rawClose()
}

func (self *DefaultDisplay) Display() string {
    return self.open() +
        self.print() +
        self.close()
}

//通过聚合实现抽象和行为实现的分离
type CountDisplay struct {
    *DefaultDisplay
}

func (self *CountDisplay) MultiDisplay(num int) string {
    str := self.open()
    for i := 0; i < num; i++ {
        str += self.print()
    }
    str += self.close()
    return str
}

package bridge

import "testing"

func TestBridge(t *testing.T) {
    d1 := DefaultDisplay{&StringDisplayImpl{"AAA"}}
    expect := "+---+\n|AAA|\n+---+\n"
    if result := d1.Display(); result != expect {
        t.Errorf("Expect result to equal %s, but %s.\n", expect, result)
    }

    //行为实现和抽象分离了
    d2 := CountDisplay{&DefaultDisplay{&StringDisplayImpl{"BBB"}}}
    expect = "+---+\n|BBB|\n+---+\n"
    if result := d2.Display(); result != expect {
        t.Errorf("Expect result to equal %s, but %s.\n", expect, result)
    }

    expect = "+---+\n|BBB|\n|BBB|\n+---+\n"
    if result := d2.MultiDisplay(2); result != expect {
        t.Errorf("Expect result to equal %s, but %s.\n", expect, result)
    }
}



相关文章

  • 设计模式-桥接模式

    设计模式-桥接模式 定义 桥接模式(Bridge Pattern)也称为桥梁模式、接口(Interface)模式或...

  • 结构型模式:桥接模式

    文章首发:结构型模式:桥接模式 七大结构型模式之二:桥接模式。 简介 姓名 :桥接模式 英文名 :Bridge P...

  • 设计模式之桥接模式

    设计模式之桥接模式 1. 模式定义 桥接模式又称柄体模式或接口模式,它是一种结构性模式。桥接模式将抽象部分与实现部...

  • 06-01-001 虚拟机的网络连接方式(转运整理)

    一、Bridged(桥接模式) 什么是桥接模式?桥接模式就是将主机网卡与虚拟机虚拟的网卡利用虚拟网桥进行通信。在桥...

  • 桥接模式与中介模式

    桥接模式-BRIDGE 对桥接模式感兴趣,是因为公司业务上需要桥接Html5和ReactNative两个平台。桥接...

  • 设计模式——桥接模式

    设计模式——桥接模式 最近公司组件分享设计模式,然而分配给我的是桥接模式。就在这里记录我对桥接模式的理解吧。 定义...

  • 桥接模式

    个人博客http://www.milovetingting.cn 桥接模式 模式介绍 桥接模式也称为桥梁模式,是结...

  • 桥接模式

    桥接模式 参考原文: https://zhuanlan.zhihu.com/p/62390221 定义 桥接模式 ...

  • 10-桥接模式

    桥接模式-Bridge Pattern【学习难度:★★★☆☆,使用频率:★★★☆☆】 处理多维度变化——桥接模式(...

  • Java设计模式——桥接模式

    Java设计模式之桥接模式 回顾 上一期分享了适配器模式,主要为了实现解耦 桥接模式 简介 桥接模式是对象的结构模...

网友评论

      本文标题:桥接模式

      本文链接:https://www.haomeiwen.com/subject/gcsdsqtx.html