用GO实现的改进的观察者模式
2013-08-02 12:42
218 查看
废话不说。上代码:
Publisher.go:
package main
import (
"container/list"
)
type Handler interface {//这里主要参考了Go里HTTP包的实现
Serve(int)
}
type HandlerFunc func(args int)
func (f HandlerFunc) Serve(args int) {//是不是很熟悉的代码?
f(args)
}
type Publish struct {
HandlerFuncs *list.List
Value int
}
func NewPublisher() *Publish {
p := new(Publish)
p.HandlerFuncs = list.New()
p.Value = 22
return p
}
func (p *Publish) AddSubscriber(f HandlerFunc) {//可以添加任何方法,只要是HandlerFunc的
p.HandlerFuncs.PushBack(f)
}
func (p *Publish) Notify(args int) {
for f := p.HandlerFuncs.Front(); f != nil; f = f.Next() {
f.Value.(Handler).Serve(args)//此处是我觉得比较得意的,比一般的观察者先进的地方,实现了任意函数名的调用
}
}
Subscriber.go:
package main
import "fmt"
type Subscribe struct {
}
func (s *Subscribe) Dosome(args int) {
fmt.Println("Dosome:", args)
}
func (s *Subscribe) Fucksome(args int) {
fmt.Println("Fucksome", args)
}
main.go:
package main
func main() {
publisher := NewPublisher()//不用多说了吧,代码很清楚了
subscriber := new(Subscribe)
publisher.AddSubscriber(HandlerFunc(subscriber.Dosome))
publisher.AddSubscriber(HandlerFunc(subscriber.Fucksome))
publisher.Notify(publisher.Value)
}
相关文章推荐
- 【寒江雪】Go实现观察者模式
- 利用 SPL 快速实现 观察者设计模式
- 改进C#代码之25:用事件模式实现通知
- 设计模式-观察者模式 C++实现
- 我所理解的设计模式(C++实现)——观察者模式(Observer Pattern)
- 【寒江雪】Go实现对象池模式
- 设计模式C++实现(15)——观察者模
- 一步步学习java并发编程模式之Active Object模式(四)改进后的java实现
- 利用Observable、Observer实现观察者模式
- 利用委托实现观察者模式
- 利用观察者模式实现Service与Activity的通信
- MVC4 + SignalR2.20 + WCF双工观察者模式,B/S实现服务端数据直推浏览器端
- Java8 观察者模式详解 jdk实现源码分析
- 用spring实现观察者设计模式
- 用组合模式、策略模式、观察者模式结合来实现一个MVC
- 设计模式C++实现(15)——观察者模式
- 观察者模式及Java实现例子
- 从观察者模式,简单实现Node的Events模块
- 安卓APP采用观察者模式实现检测版本更新
- 观察者模式学习以及jdk实现