使用Golang的interface接口设计原则

使用Golang的interface接口设计原则

软件设计的最高目标:高内聚,低耦合
1.开闭原则

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

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

2.依赖倒转原则

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

在这里插入图片描述

package main

import "fmt"
// ===== > 抽象层 < ========
type Barking interface {
	Voice()
}
type Animal interface {
	Bark(barking Barking)
}
// ===== > 实现层 < ========
type Dog struct {
}
func (dog *Dog)Bark(barking Barking)  {
	fmt.Println("狗在叫")
	barking.Voice()
}

type Cat struct {
}
func (cat *Cat)Bark(barking Barking)  {
	fmt.Println("猫在叫")
	barking.Voice()
}

type DogBark struct {
}
func (dogbark *DogBark)Voice()  {
	fmt.Println("汪汪汪")
}

type CatBark struct {
}
func (catbark *CatBark)Voice()  {
	fmt.Println("喵喵喵")
}
func main()  {
// ===== > 业务逻辑层 < ========
	var animal Animal
	var listenbarking Barking
	animal=&Dog{}
	listenbarking=&DogBark{}
	animal.Bark(listenbarking)
	animal=&Cat{}
	listenbarking=&CatBark{}
	animal.Bark(listenbarking)
}
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值