了解在你的代码中从接口的客户那里去除不必要的责任的原则

ccb26db5e6407b9d8cf97b72bc3ae0e0.webp

为什么

在处理接口时,你可能会发现你有一个被不同客户实现的接口,但并不是所有的客户都需要实现该接口的所有方法。这很糟糕,因为你在强迫客户实现他们不需要的方法,留下像这样的空方法:

什么

接口隔离是SOLID原则的一部分,它说的是一个接口的客户必须只实现他们需要的方法,否则你必须把你的接口分成更具体的接口,这样客户就只实现他们需要的方法。

134893c1fdeffd355cd7f7535241233e.webp

界面隔离原则(图)

如何

为了向你介绍这一原则,我将使用《龙珠》作为参考,让我们想象一下,我们正在开发一个新的《龙珠》游戏,所以我们所做的是创建一个战士界面,由动漫中的所有角色来实现,在这个例子中,它将是撒旦先生和悟空:

9b64541e3214a5e17966fe9e5bc04a2c.webp

战士界面(图)

WarriorTransform

所以在这个例子中,他将实现一个他不需要的方法,在这种情况下,这个方法将是空的。

Super Saiyan(超级赛亚人)Transform

888defdd5f880c11786fb7c738bc5ac0.webp

Super Saiyan(超级赛亚人)

正如你所看到的,最后将有至少一个接口被所有的客户实现,这将是作为一个类型的接口来指代我们的角色。

代码时间!

现在让我们把这些参考资料带入Golang,看看代码会是什么样子。但在这之前,让我们看看如果没有这个原则,会是什么样子的:

Warrior
Warrior

我们执行每个客户的能力:

当我们运行该程序时,我们得到如下输出:

10e40c571af4f6c972dc09fcac8dc206.gif

一切工作都很顺利,MR.Satan踢拳,悟空踢拳和变身,但底层代码却不尽如人意,因为MR.Satan客户端正在实现他不需要的方法。撒旦客户端正在实现一个他不需要的方法:

让我们通过应用界面隔离原则来解决这个问题。

SuperSaiyan(超级赛亚人)Goku(悟空)
MR.SatanKickPucnh

https://www.sangniao.com/

Goku(悟空)

我们的主文件和以前一样:

如果我们运行这个程序,我们仍然得到同样的响应,但有一个更好的基础代码:

https://www.sangniao.com/

ecc4021a31333b1d369f666783e503c5.gif

总结

ISP是一个简单的原则,它可以帮助你在实现由不同客户使用的大型接口时从客户那里移除不必要的责任,但这可能会促使你有无数的接口,这取决于你要分割的主接口有多大,所以要小心处理,根据我的经验,我只是将最多有10个方法的接口分开,最后最多只有3个接口,这对我来说很有效。

本文标题:用《龙珠》动画解释Golang的界面分离原理