行为-观察者模式

100 阅读1分钟

1.概述

简介:当对象存在 1:N (observer) 的关系的时候,当 被观察对象 状态改变,通知 N 个 observer 进行 行为的改变。属于行为模式

特点:

  1. 对象之间的关系:1:N
  2. 当 被观察对象变化,要通知 N 个observer进行变化

参考:观察者模式

2.代码实现


package main

import "fmt"

//1.抽象层
//被观察对象 1:N 观察者对象。一个 Subjecter 有 N 个 Observer 对象
//当被观察状态改变,会 通知观察者对象 做相应的改变 。 当 

type Subjecter interface {
	Attach(observer Observer)
	//Remove(observer Observer)
	NotifyAllObservers()
}

type Observer interface {
	Action(state int)
}

//2.实现层
type Subject struct {
	state     int
	observers []Observer
}

func (s *Subject) GetState() int {
	return s.state
}

func (s *Subject) SetState(state int) {
	s.state = state
	s.NotifyAllObservers()
}

func (s *Subject) Attach(observer Observer) {
	s.observers = append(s.observers, observer)
}

//func (s *Subject) Remove(observer Observer) {
//
//}

func (s *Subject) NotifyAllObservers() {
	for _, observer := range s.observers {
		observer.Action(s.state)
	}
}

//
type BinaryObserver struct {
}

func (bo *BinaryObserver) Action(state int) {
	fmt.Println("binary observer ", state)
}

type OctalObserver struct {
}

func (oo *OctalObserver) Action(state int) {
	fmt.Println("Octal observer ", state)

}

// main
func main() {

	bo := new(BinaryObserver)
	oo := new(OctalObserver)

	subject := new(Subject)
	subject.Attach(bo)
	subject.Attach(oo)

	fmt.Println("first state change")
	subject.SetState(100)

	fmt.Println("secord state change")
	subject.SetState(200)

}