Go 设计模式-观察者模式

简介: Go 设计模式-观察者模式

设计模式

image.png

观察者模式


观察者模式,也被称为发布订阅模式(Publish-Subscribe Design Pattern)

Define a one-to-many dependency between objects so that when one object changes state, all its dependents are notified and updated automatically.

翻译中文:

在对象之间定义一个一对多的依赖,当一个对象状态改变的时候,所有依赖的对象都会自动收到通知。

观察者模式的

应用场景


观察者模式需要三个条件:观察者 被观察,话题订阅

实际场景可以是:

  • 公众号推送消息,独立的微信号关注多个公众号 ,每次总能收到公众号发布的更新内容,订阅号也会将公众号置顶标红提醒
  • 邮件订阅
  • RSS Feeds


代码


package observer
import "fmt"
type Subject struct {
 observers []Observer
 context   string
}
func NewSubject() *Subject {
 return &Subject{
  observers: make([]Observer, 0),
 }
}
func (s *Subject) Attach(o Observer) {
 s.observers = append(s.observers, o)
}
func (s *Subject) notify() {
 for _, o := range s.observers {
  o.Update(s)
 }
}
func (s *Subject) UpdateContext(context string) {
 s.context = context
 s.notify()
}
type Observer interface {
 Update(*Subject)
}
type Reader struct {
 name string
}
func NewReader(name string) *Reader {
 return &Reader{
  name: name,
 }
}
func (r *Reader) Update(s *Subject) {
 fmt.Printf("%s receive %s\n", r.name, s.context)
}

测试代码

package observer
func ExampleObserver() {
 subject := NewSubject()
 reader1 := NewReader("reader1")
 reader2 := NewReader("reader2")
 reader3 := NewReader("reader3")
 subject.Attach(reader1)
 subject.Attach(reader2)
 subject.Attach(reader3)
 subject.UpdateContext("observer mode")
 // Output:
 // reader1 receive observer mode
 // reader2 receive observer mode
 // reader3 receive observer mode
}
相关文章
|
6天前
|
设计模式 Java 关系型数据库
设计模式——观察者模式
观察者模式介绍、观察者模式优化天气预报案例、JDK 的Observable类和Observer类
设计模式——观察者模式
|
1月前
|
设计模式 存储 前端开发
【十四】设计模式~~~行为型模式~~~观察者模式(Java)
文章详细介绍了观察者模式(Observer Pattern),这是一种对象行为型模式,用于建立对象之间的一对多依赖关系。当一个对象状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。文中通过交通信号灯与汽车的案例以及多人联机对战游戏的设计方案,阐述了观察者模式的动机和应用场景。接着,文章介绍了观察者模式的结构、角色、优点、缺点以及适用情况,并通过代码示例展示了如何在Java中实现观察者模式。此外,还探讨了观察者模式在MVC架构中的应用以及Java中对观察者模式的支持。
【十四】设计模式~~~行为型模式~~~观察者模式(Java)
|
1月前
|
设计模式 安全 Go
[设计模式]行为型模式-观察者模式
[设计模式]行为型模式-观察者模式
|
1月前
|
设计模式 Go
go 设计模式之观察者模式
go 设计模式之观察者模式
|
2月前
|
设计模式 Go
Go语言设计模式:使用Option模式简化类的初始化
在Go语言中,面对构造函数参数过多导致的复杂性问题,可以采用Option模式。Option模式通过函数选项提供灵活的配置,增强了构造函数的可读性和可扩展性。以`Foo`为例,通过定义如`WithName`、`WithAge`、`WithDB`等设置器函数,调用者可以选择性地传递所需参数,避免了记忆参数顺序和类型。这种模式提升了代码的维护性和灵活性,特别是在处理多配置场景时。
60 8
|
2月前
|
设计模式 安全 Java
Java面试题:设计模式如单例模式、工厂模式、观察者模式等在多线程环境下线程安全问题,Java内存模型定义了线程如何与内存交互,包括原子性、可见性、有序性,并发框架提供了更高层次的并发任务处理能力
Java面试题:设计模式如单例模式、工厂模式、观察者模式等在多线程环境下线程安全问题,Java内存模型定义了线程如何与内存交互,包括原子性、可见性、有序性,并发框架提供了更高层次的并发任务处理能力
60 1
|
2月前
|
设计模式 缓存
iLogtail设计模式问题之观察者模式在iLogtail中是如何应用的
iLogtail设计模式问题之观察者模式在iLogtail中是如何应用的
|
3月前
|
设计模式 消息中间件 存储
跟着GPT学设计模式之观察者模式
观察者模式是一种行为型设计模式,它定义了对象之间的一对多依赖关系,使得当一个对象的状态发生改变时,其依赖对象都能够收到通知并自动更新。一般情况下,被依赖的对象叫作被观察者(Observable),依赖的对象叫作观察者(Observer)。
26 1
|
3月前
|
设计模式 存储 Java
Java设计模式之观察者模式详解
Java设计模式之观察者模式详解
|
3月前
|
设计模式
观察者模式-大话设计模式
观察者模式-大话设计模式