-->

左耳听风_038_37_编程范式游记8-_Go_语言的委托模式

你好,我是陈浩网名苏尔多house.那这节课呢我们来讲购物员的委托模式,那购物员的这个模式啊挺好玩的。

声明一个struct跟c很一样,然后呢我就可以直接把这个struct的类型啊放到另一个struct里面。

那先到文章中啊,看几个委托的简单例子。

我们先来看第一段代码。

在这段代码中呢,我们声明了一个widget啊,它有属性x和y.然后呢,我用它声明了一个label,直接把vidget委托进去,然后呢我再给label声明,并实现了一个pain的方法。

那这样呢我就可以在label实例中啊调用委托给vidget的方法了。

我们可以看到,如果有成员变量重名啊,需要我们手动解决冲突,然后呢我们继续来扩展代码。

我先来写一个button,然后把label啊委托给button,然后呢再写一个list box,然后把visit委托进去。

然后呢我再声明两个接口用于多肽。

于是呢我们就可以像文中这样泛型的来使用它们了。

我们再来看一个undo的委托重构的例子。

那前面这个呢是go语言中委托和接口多态的编程方式。

那其实呢这个是面向对象和原型编程综合的玩法。

那这个玩法可不可以玩的更有意思呢?啊,这个是可以的那首先呢我们先声明一个数据容器inset,那其中呢有at t delete和contains方法。

然后呢还有一个转字符串的方法,然后呢我们使用这个数据容器啊,加一点数据在里面。

那这个数据容器平淡无奇,我们想给它加一个undo的功能。

那我们呢就可以像文中这样创建一个新的容器,adorable interset委托给之前的interset,然后呢重写它的add和delete的方法来实现。

那这样呢这个新的数据容器的添加和删除等操作啊都可以记录下来啊,然后undo了。

那需要注意的是啊,为了实现这个功能呢,我们用了一个新的adorable inthe set啊,几乎重写了所有的innet和写相关的方法。

但是呢可能别的类啊也需要undo的功能。

那我是不是要重写所有的需要undo的类呢?那这样的代码非常类似,就是因为数据容器不一样啊,我就需要重写他们,这太二了。

我们能不能利用前面学到的泛型编程、函数式编程、LC等范式啊,来把这个事儿干的好一些呢?啊,当然啊是可以的,就像文中这样,我们先声明一个undo的函数数组,那其实呢是一个栈,并且呢实现一个通用的add函数。

那这个函数呢需要一个函数指针,它把这个函数指针呢存放到undo函数数组中。

那在undo的函数中呢,我们会去遍历undo函数数组啊,并且执行它执行完之后呢就谈栈。

那么我们前面这个interset就可以使用这个安度函数数组啊来改写。

然后呢,在其中的add和delete中啊实现undo操作,在add操作时呢加入delete操作的undo,在delete操作时呢加入add操作的undo.那从这里的代码中啊,我们再次看到构源的安度接口,把安度的流程给抽象出来。

而把要怎么安度这件事啊,交给业务代码来维护。

那这样在undo的时候就可以回调这个方法来做与业务相关的undo操作了。

那这个是不是和最开始c加加的泛型编程很像呢?是不是也和map reduce ed filter这样的只关心控制流程,不关心业务逻辑的做法很像呢?而且呢一开始我用一个adorable interset来依装inset类,到反过来在inneset里面去依赖undo类。

那这个呢就是控制反转LC.那文末呢是编程范式游记系列文章的目录,方便你了解这一系列内容的全貌。