Advertisement
alestane

Basic observer pattern

Mar 4th, 2013
167
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Go 0.70 KB | None | 0 0
  1. package Observer
  2.  
  3. type (
  4.     Event struct {
  5.         Content interface{}
  6.         Response chan<- float32
  7.     }
  8.     Monitor chan<- Event
  9.     Target interface{
  10.         Add(monitor Monitor)
  11.         Remove(monitor Monitor) bool
  12.     }
  13.     repeater []Monitor
  14. )
  15.  
  16. func (self *repeater) Add(m Monitor) {
  17.     *self = append(*self, m)
  18. }
  19.  
  20. func (self *repeater) Remove(m Monitor) bool {
  21.     for i, which := range *self {
  22.         if which == m {
  23.             copy((*self)[i:], (*self)[i + 1:])
  24.             return true
  25.         }
  26.     }
  27.     return false
  28. }
  29.  
  30. func (self *repeater) repeat(source <-chan Event) {
  31.     for e := range source {
  32.         for _, m := range *self {
  33.             m <- e
  34.         }
  35.     }
  36. }
  37.  
  38. func NewTarget(source <-chan Event) Target {
  39.     t := &repeater{}
  40.     go t.repeat(source)
  41.     return &t
  42. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement