go语言设计模式-合成复用原则

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了go语言设计模式-合成复用原则相关的知识,希望对你有一定的参考价值。

合成复用原则CRP: 如果使用继承,会导致父类的的任何变化都可能影响到子类的行为。如果使用对象组合,就降低了这种依赖关系。对于继承和组合,优先使用组合。


如下图所示,中间的猫咪只需要继承黄猫的睡觉方法,若此时采用继承,则导致继承到黄猫父类恐龙的所有方法,增加了代码复杂度。本身只需要添加一个睡觉的方法,却继承了其父类所有的方法。

一般不建议用继承去添加新的类或者添加新的方法。合成复用原则降低了模块与模块间的依赖关系,能用组合和继承都实现的方法,优先使用组合。

go语言设计模式-合成复用原则_合成复用原则

package main

import "fmt"

type Cat struct


func (c *Cat) Eat()
fmt.Println("小猫吃饭")


//给小猫添加可以睡觉的方法(使用继承的方式)
type CatB struct
Cat


func (cb *CatB) Sleep()
fmt.Println("小猫睡觉")


//给小猫添加可以睡觉的方法(使用组合的方式)
type CatC struct
//C *Cat


func (cc *CatC) Eat(c *Cat)
//cc.C.Eat()
c.Eat()



func (cc *CatC) Sleep()
fmt.Println("小猫睡觉")


func main()
c := &Cat
c.Eat()

fmt.Println("---------------")
cb := &CatB
cb.Eat()
cb.Sleep()

fmt.Println("---------------")
cc := &CatC
cc.Eat(c)
cc.Sleep()

执行结果如下:

小猫吃饭
---------------
小猫吃饭
小猫睡觉
---------------
小猫吃饭
小猫睡觉

以上是关于go语言设计模式-合成复用原则的主要内容,如果未能解决你的问题,请参考以下文章

设计模式软件设计七大原则 ( 合成复用原则 | 代码示例 )

设计模式-合成复用原则-》面向对象设计原则

七大设计原则之合成复用原则应用

设计模式七大原则之合成复用原则

面向对象设计原则之合成复用原则

面向对象设计原则之合成复用原则