菜单 学习猿地 - LMONKEY

VIP

开通学习猿地VIP

尊享10项VIP特权 持续新增

知识通关挑战

打卡带练!告别无效练习

接私单赚外块

VIP优先接,累计金额超百万

学习猿地私房课免费学

大厂实战课仅对VIP开放

你的一对一导师

每月可免费咨询大牛30次

领取更多软件工程师实用特权

入驻
2072
0

Go 实现常用设计模式(九)代理模式

原创
05/13 14:22
阅读数 3331

代理模式 (proxy)

意图:
代理模式为另一个对象提供一个替身或者占位符以控制对这个对象的访问

关键代码:
代理类和被代理类实现同一接口,代理类中持有被代理类对象

应用实例:

  1. 火车票的代理售票点。代售点就是代理,它拥有被代理对象的部分功能—售票功能
  2. 明星的经纪人,经纪人就是代理,负责为明星处理一些事务。

Go实现代理模式

package proxy

import "fmt"

type Seller interface {
    sell(name string)
}

// 火车站
type Station struct {
    stock int //库存
}

func (station *Station) sell(name string) {
    if station.stock > 0 {
        station.stock--
        fmt.Printf("代理点中:%s买了一张票,剩余:%d \n", name, station.stock)
    } else {
        fmt.Println("票已售空")
    }

}

// 火车代理点
type StationProxy struct {
    station *Station // 持有一个火车站对象
}

func (proxy *StationProxy) sell(name string) {
    if proxy.station.stock > 0 {
        proxy.station.stock--
        fmt.Printf("代理点中:%s买了一张票,剩余:%d \n", name, proxy.station.stock)
    } else {
        fmt.Println("票已售空")
    }
}

测试用例

package proxy

import "testing"

func TestProxy(t *testing.T) {

    station := &Station{3}
    proxy := &StationProxy{station}
    station.sell("小华")
    proxy.sell("派大星")
    proxy.sell("小明")
    proxy.sell("小兰")
}

具体代码

更详细的代码可参考:https://github.com/pibigstar/go-demo 里面包含了 Go 常用的设计模式、Go 面试易错点、简单的小项目(区块链,爬虫等)、还有各种第三方的对接(redis、sms、nsq、elsticsearch、alipay、oss...),如果对你有所帮助,请给个 Star,你的支持,是我最大的动力!

发表评论

0/200
2072 点赞
0 评论
收藏
为你推荐 换一批