教程集 www.jiaochengji.com
教程集 >  Golang编程  >  golang教程  >  正文 使用Golang的interface接口设计原则

使用Golang的interface接口设计原则

发布时间:2022-02-04   编辑:jiaochengji.com
教程集为您提供使用Golang的interface接口设计原则等资源,欢迎您收藏本站,我们将为您提供最新的使用Golang的interface接口设计原则资源
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"/></svg><h3>使用Golang的interface接口设计原则</h3> <h4>软件设计的最高目标:<mark>高内聚,低耦合</mark></h4> <h5>1.开闭原则</h5>

当我们给一个系统添加一个功能的时候,不是通过修改代码,而是通过增添代码来完成。

开闭原则:一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。 简单的说就是在修改需求的时候,应该尽量通过扩展来实现变化,而不是通过修改已有代码来实现变化。

<h5>
2.依赖倒转原则</h5>

​如果我们在设计一个系统的时候,将模块分为3个层次,抽象层、实现层、业务逻辑层。那么,我们首先将抽象层的模块和接口定义出来,这里就需要了interface 接口的设计,然后我们依照抽象层,依次实现每个实现层的模块,在我们写实现层代码的时候,实际上我们只需要参考对应的抽象层实现就好了,实现每个模块,也和其他的实现的模块没有关系,这样也符合了上面介绍的开闭原则。这样实现起来每个模块只依赖对象的接口,而和其他模块没关系,依赖关系单一。系统容易扩展和维护。 我们在指定业务逻辑时也是一样,只需要参考抽象层的接口来处理业务,抽象层暴露出来的接口就是我们业务层可以使用的方法,然后可以通过多态,接口指针指向哪个实现模块,调用了的就是具体的实现方法,这样我们业务逻辑层也是依赖抽象层编程。

<pre><code class="lang-go hljs"><span class="token keyword">package</span> main <span class="token keyword">import</span> <span class="token string">"fmt"</span> <span class="token comment">// ===== > 抽象层 < ========</span> <span class="token keyword">type</span> Barking <span class="token keyword">interface</span> <span class="token punctuation">{</span> <span class="token function">Voice</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token keyword">type</span> Animal <span class="token keyword">interface</span> <span class="token punctuation">{</span> <span class="token function">Bark</span><span class="token punctuation">(</span>barking Barking<span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token comment">// ===== > 实现层 < ========</span> <span class="token keyword">type</span> Dog <span class="token keyword">struct</span> <span class="token punctuation">{</span> <span class="token punctuation">}</span> <span class="token keyword">func</span> <span class="token punctuation">(</span>dog <span class="token operator">*</span>Dog<span class="token punctuation">)</span><span class="token function">Bark</span><span class="token punctuation">(</span>barking Barking<span class="token punctuation">)</span> <span class="token punctuation">{</span> fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span><span class="token string">"狗在叫"</span><span class="token punctuation">)</span> barking<span class="token punctuation">.</span><span class="token function">Voice</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token keyword">type</span> Cat <span class="token keyword">struct</span> <span class="token punctuation">{</span> <span class="token punctuation">}</span> <span class="token keyword">func</span> <span class="token punctuation">(</span>cat <span class="token operator">*</span>Cat<span class="token punctuation">)</span><span class="token function">Bark</span><span class="token punctuation">(</span>barking Barking<span class="token punctuation">)</span> <span class="token punctuation">{</span> fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span><span class="token string">"猫在叫"</span><span class="token punctuation">)</span> barking<span class="token punctuation">.</span><span class="token function">Voice</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token keyword">type</span> DogBark <span class="token keyword">struct</span> <span class="token punctuation">{</span> <span class="token punctuation">}</span> <span class="token keyword">func</span> <span class="token punctuation">(</span>dogbark <span class="token operator">*</span>DogBark<span class="token punctuation">)</span><span class="token function">Voice</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span><span class="token string">"汪汪汪"</span><span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token keyword">type</span> CatBark <span class="token keyword">struct</span> <span class="token punctuation">{</span> <span class="token punctuation">}</span> <span class="token keyword">func</span> <span class="token punctuation">(</span>catbark <span class="token operator">*</span>CatBark<span class="token punctuation">)</span><span class="token function">Voice</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span><span class="token string">"喵喵喵"</span><span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token keyword">func</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment">// ===== > 业务逻辑层 < ========</span> <span class="token keyword">var</span> animal Animal <span class="token keyword">var</span> listenbarking Barking animal<span class="token operator">=</span><span class="token operator">&</span>Dog<span class="token punctuation">{</span><span class="token punctuation">}</span> listenbarking<span class="token operator">=</span><span class="token operator">&</span>DogBark<span class="token punctuation">{</span><span class="token punctuation">}</span> animal<span class="token punctuation">.</span><span class="token function">Bark</span><span class="token punctuation">(</span>listenbarking<span class="token punctuation">)</span> animal<span class="token operator">=</span><span class="token operator">&</span>Cat<span class="token punctuation">{</span><span class="token punctuation">}</span> listenbarking<span class="token operator">=</span><span class="token operator">&</span>CatBark<span class="token punctuation">{</span><span class="token punctuation">}</span> animal<span class="token punctuation">.</span><span class="token function">Bark</span><span class="token punctuation">(</span>listenbarking<span class="token punctuation">)</span> <span class="token punctuation">}</span> </code></pre> 到此这篇关于“使用Golang的interface接口设计原则”的文章就介绍到这了,更多文章或继续浏览下面的相关文章,希望大家以后多多支持JQ教程网!

您可能感兴趣的文章:
golang 初始化并赋值_Golang | 既是接口又是类型,interface是什么神仙用法?
Golang必备技巧:接口型函数
2020-10-18Go语言接口
Go 接口(interface)的基本介绍、特点及语法说明
Go语言基础之接口(面向对象编程下)
浅谈golang中的接口
goLang 类型断言 type assertion
Go语言interface详解
真的理解go interface了吗?
golang接口初解析

[关闭]
~ ~