观察者模式

虽然,工作中不使用任何设计模式,写一个包含1000行代码的函数,并不会有什么问题。但我现在开始觉得,如果在写代码前能思考、套用一些模式的话,我们的思考会更有深度。

开发中经常会遇到的场景:在一个函数体中,我们总是需要在完成核心功能之后,再附加完成一些别的功能。

拿电子书的场景举例,在用户付款成功后,核心的操作就是:交付权益。但我们往往还会有别的附加操作,比如:

  • 通知推荐平台,上报用户购买的数据,用于后续个性化推荐
  • 通知结算平台、上报用户购买的数据,用于公司收支结算

很多人都习惯在函数末尾加上一堆这样的逻辑,也包括我自己。但其实,我们可以把代码写的更优雅。

观察者模式非常适合这种通知的场景,我们首先定义观察主体,它提供了3个方法,注册观察者、删除观察者、通知所有注册的观察者。

type Subject struct {
	List map[string]Observer
}

func (subject *Subject) Attach (obj Observer, identify string) {
	subject.List[identify] = obj
}

func (subject *Subject) Del ( identify string) {
	delete(subject.List[identify])
}

// 通知所有观察者
func (subject *Subject) NotifyAllObservers(info string) {
	for identify, obs := range subject.List {
		if err := obs.Update(info); err != nil {
		}
	}
}

下面定义观察者,观察者统一实现Observer接口

type Observer interface {
	// 简化参数
	Update(info string) error
}

// 实现第一个观察者
type LikeObserver struct {
	Identify string
}

func (likeObs *LikeObserver) Update(info string) error {
	return nil
}

整个过程其实挺简单的,有时候,可能我们是太心急,结果,把耐心思考给省略了。再有时候想想,堆砌代码一点用都没有,真不如好好思考思考。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值