Go Bridge 桥接模式

package main

import "fmt"

// Bridge模式 属于单一职责,主要解决在继承的情况下,子类急剧膨胀,难以维护。
// 而Bridge模式,改继承为组合
// 在现实生活中,某些类具有两个或多个维度的变化,如图形既可按形状分,又可按颜色分。
// 如何设计类似于 Photoshop 这样的软件,能画不同形状和不同颜色的图形呢?
// 如果用继承方式,m 种形状和 n 种颜色的图形就有 m×n 种,不但对应的子类很多,
// 而且扩展困难。

// 包是是一个抽象化的角色
type Bag interface {
	GetName()
}

type BridgeBag struct {
	color Color
}

// 扩展抽象化角色 手包
type HandBag struct {
	//BridgeBag
	color Color
	Name string
}

func (h *HandBag) GetName(){
	fmt.Printf("包的名字是%s,颜色是%s \n", h.Name,h.color)
}

// 扩展抽象化角色 钱包
type Wallet struct {
	//BridgeBag
	color Color
	Name string
}

func (w Wallet) GetName(){
	fmt.Printf("包的名字是%s,颜色是%s \n", w.Name,w.color)
}

type Color interface {
	GetColor()
}

// 具体实现的角色
type Blue struct {
	Name string
}

func (b *Blue) GetColor(){
	fmt.Printf("颜色是%s \n", b.Name)
}

type Red struct {
	Name string
}

func (r *Red) GetColor(){
	fmt.Printf("颜色是%s \n", r.Name)
}


func main(){
	// 红色
	r := Red{Name:"红色"}
	// 蓝色
	b := Blue{Name:"蓝色"}
	// 红色的手包
	h := HandBag{Name:"手包"}
	h.color = &r
	h.GetName()

	// 蓝色手包
	h.color = &b
	h.GetName()

	w := Wallet{Name:"钱包"}
	// 红色钱包
	w.color = &r
	w.GetName()
	// 蓝色钱包
	w.color = &b
	w.GetName()
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值