设计模式GO实现-行为类型

观察者模式

观察者模式:能够在数据变更或某时间发生时,触发变更通知给观察者。观察者是接收事件和通知的那一方。。

观察者模式:允许一个实例类型,在数据变更事件发生时,“发布”事件到另外一个类型的实例(观察者)。让观察者能够得到这个“通知”,然后去执行具体的后续处理。 存在两个对象:被观察者,观察者。被观察者发送通知,观察者接收通知,然后进行处理。

在长运行事件的应用例如web应用: 能够保持住一个”收集”触发事件的观察者。用于处理收集到的触发事件。

实现方式不同,但制定的接口可以作为运用的参考标准。

type Events strut{
   //定一个事件,具体实现的类型,需要看具体的应用情况。
   Data  string
} 
type observer interface{
  //针对发现者,必须提供一个接收通知的通道(函数)。以此来接收事件或通知。
  OnNotify(Event)
}
//通知器,用来注册发现者,消除发现者,通知消息。
type Notify interface{
  //注册发现者,
  Register(observer)
  //移除发现者
  DelRegister(observer)
  //发送通知
  Notifiy(Event)
}

小结:

观察者的模式的运用场景:就是在事件发生时,能够将这些通知发送给观察者,支持多个观察者。以上的示例中,仅具体里接口的定义,但能够作为一个标准来提供不同应用的借鉴使用。

 

策略行为

strategy behavioral。策略行为模式支持在运行时,选择具体的算法来实现,支持多个算法。

定义了算法的封装,并且能够在运行的时候,进行切换。

//定义算法的实际操作者接口。每一种算法的实际执行都需要实现接口。
type Operator interface{
    Apply(int,int)int
}

//定义一个策略器,策略器能够接收一个实际的操作者。操作的具体函数。并且操作器需要一个方法,就是用来执行策略器的操作动作。然后在动作内部再去实际的调用,实际操作者提供的方法。
type Operation interface{
  //策略器,必须能够接收一个实际的操作者。
  Operator Operator
  //当然也可以多定义几个策略器额外需要的参数,
  name string
}
func(op *Operation)Operator(value1,value2 int){
    //在策略器当中可以预先执行一些额外的动作。
    dosometing
    //利用实际的操作者,具体的算法器。
    return op.Operator.Apply(value1,value2)
}

//--------使用策略器------
type Addition struct {

func(Addition)Apply(v1,v2)int{
  return v1+v2
}

app := Operation{Addition}
app.Operator(1,2)  //3

小结:

观察者模式,是用来接收事件和通知,以此来触发我们的观察者去接收到通知。并且接收到这些通知之后,去做对应的动作。当然这种通知的机制,在golang当中是可以使用channel来作为通通知通道使用的。但同样是可以把这个往chan发送消息但动作封装成为模式当中但Notificaly方法。

策略行为模式:是允许在具体运行的时候,才把具体的策略器传递进来,然后使用这个具体的操作者(算法器)来完成实际的工作。并且此时策略器,对外暴露一个属于策略器的方法。外部操作的时候,就使用这个策略器方法。 而策略器方法是可以和实际操作者(算法器)中的方法名,是不一样的。

 

转载于:https://my.oschina.net/u/4156317/blog/3080298

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值