Go 编程模式:k8s Visitor 模式
本篇文章主要想讨论一下,Kubernetes 的
kubectl
命令中的使用到到的一个编程模式 – Visitor(注:其实,
kubectl
主要使用到了两个一个是Builder,另一个是Visitor)。本来,Visitor 是面向对象设计模英中一个很重要的设计模款(参看Wikipedia
Visitor Pattern词条
),这个模式是一种将算法与操作对象的结构分离的一种方法。这种分离的实际结果是能够在不修改结构的情况下向现有对象结构添加新操作,是遵循开放/封闭原则的一种方法。这篇文章我们重点看一下
kubelet
中是怎么使用函数式的方法来实现这个模式的。
本文是全系列中第9 / 10篇: Go编程模式
一个简单示例
我们还是先来看一个简单设计模式的Visitor的示例。
-
我们的代码中有一个
Visitor的函数定义,还有一个Shape接口,其需要使用Visitor函数做为参数。 -
我们的实例的对象
Circle和Rectangle实现了Shape的接口的accept()方法,这个方法就是等外面给我传递一个Visitor。
(
58
人打了分,平均分:
4.09
)
看到好些人在写更新缓存数据代码时,
先删除缓存,然后再更新数据库
,而后续的操作会把数据再装载的缓存中。
然而,这个是逻辑是错误的
。试想,两个并发操作,一个是更新操作,另一个是查询操作,更新操作删除缓存后,查询操作没有命中缓存,先把老数据读出来后放到缓存中,然后更新操作更新了数据库。于是,在缓存中的数据还是老的数据,导致缓存中的数据是脏的,而且还一直这样脏下去了。
(
161
人打了分,平均分:
4.53
)