您好!欢迎来到爱源码

爱源码

热门搜索: 抖音快手短视频下载   

使用Golang的界面设计标准 {网站源码}

  • 时间:2022-10-29 03:35 编辑: 来源: 阅读:289
  • 扫一扫,手机访问
摘要:使用Golang的界面设计标准 {网站源码}
1接口接口接口是GO语言的基本特性之一。 可以理解为一种规范或其他人同意的规范。 不像java,C#,它不需要显示实现了一个接口。它没有继承或子类或“实现”关键字,只是通过约定的形式隐式实现接口中的方法。 因此,Golang中的接口使得编码更加灵活和可扩展。 如何认识go语言中的接口?只要记住以下三点:注意:a .接口可以由任何对象实现,一个类型/对象也可以实现多个接口。b .方法不能重载,如eat()、Eat(s string)不能有package main import " fmt " type phone interface { call()} type诺基亚phone struct {} func(诺基亚phone诺基亚phone) call () {fmt.println("我是诺基亚,我可以给你打电话!")} type apple phone struct { } func(iPhone apple phone)call(){ fmt。Println("我是苹果手机,我可以给你打电话!")} func main(){ var phone phone phone = new(诺基亚手机)phone.call () phone = new(苹果手机)phone.call ()}以上展示了接口interface的语法,在main函数中,还展示了多态性。 同一部手机的通用接口指向不同的实体对象,调用的call()方法有不同的打印效果,所以表现出多态的特点。 2面向对象2.1平铺模块设计中的打开和关闭标准。那么,作为一种接口数据类型,它存在的意义是什么?其实是为了满足一小部分面向对象的编程思想。 我们知道软件设计的最高目标是高内聚和低耦合。 那么其中一个设计标准叫做开闭标准。 开合准则是什么?接下来我们来看一个例子:package mainimport "fmt"//我们要写一个类,Banker银行业务员类型Banker struct {}//存款业务func(this * Banker)save(){ fmt . println("存款业务...")}//转账业务func (this *Banker)转账(){fmt。Println("转让业务...")}//支付业务func(this * banker)pay(){ fmt . println("支付业务...")} funcmain(){ Banker:= & Banker { } Banker。保存()庄家。转账()庄家。Pay ()}代码很简单,就是一个可能有很多业务的银行职员,比如储蓄()存款,转账()转账,支付()付款。 所以如果这个业务员模块只有这些方法,但是随着我们的程序越来越复杂,银行业务员可能还要添加方法,这样就会导致业务员模块越来越臃肿。 修复pattern.001.png易果朗设计的设计,会导致我们在给Banker添加新业务时,直接修改原来的Banker代码。那么庄家模块的功能就会越来越多,出现问题的概率也会越来越多。如果此时Banker中已经有99笔业务,现在又要添加第100笔业务,可能是因为一个不小心,结果之前99笔业务一起崩溃了。由于所有业务都在一个Banker类中,耦合度太高,Banker的职责不够单一,代码的维护成本随着业务的复杂程度呈指数级增长。 2.2开闭准则的设计然后,如果我们有了接口,接口,那么我们就可以用通用的方式来布局,做一个通用的庄家模块,然后提供一个通用的方法。 根据这个通用模块,分别对付款银行(付款方式)和转账银行(转账方式)实现如下:容易得到Golang设计pattern.002.png,那么你仍然可以得到程序的要求。 然后,当我们想给庄家添加额外的功能时,我们直接修改了之前庄家的内容。现在我们可以单独定义一个股票庄家(实现股票法)放入这个系统。 而且,股票庄家的成败并不会影响之前稳定的系统。他单身,独立。 因此,当我们向系统添加功能时,我们不是通过修改代码来完成的,而是通过添加代码来完成的,这是开闭准则的核心思想。 所以为了满足以上要求,肯定需要interface来提供一个通用的接口。 Golang代码实现如下:package mainimport "fmt"//普通银行代表类型抽象银行家接口{ do busi()//普通解决方案业务接口}//存款代表类型save Banker Struct {//abstract Banker } func(SB * save Banker)dobusi () {fmt.println("存款已发")}//类型转账银行家Struct {//abstract Banker } func(TB *转账银行家)do busi(){ fmt . println("已发转账")}//付款业务员,类型付款银行家Struct {/AbstractBanker} func(发DoBusi() //进行转账tb := & TransferBanker{} tb。DoBusi() //进行支付pb := & PayBanker{} pb。DoBusi()}当然,我们也可以设计一个基于AbstractBanker的小框架。//我们可以实现架构层(基于通用层的业务封装——对接口interface的封装)Func Banker业务(Banker抽象Banker) {//通过接口向下调用,(多态)Banker。DoBusi()}那么业务调用可以在main中实现如下:func main() {//存款银行家业务(& SaveBanker{}) //做存款银行家业务(& TransferBanker{}) //做存款银行家业务(& PayBanker{})}看打开和关闭条件的定义:打开和关闭条件:一个软件实体如类、模块、函数要展开和关闭才能修改。 简单来说,在修改需求的时候,尽量通过扩展来实现改变,而不是修改现有的代码。 接口3的意义是好的。现在已经基本了解了接口,那么接口的意义到底在哪里呢?想必现在你已经有了初步的了解。其实接口最大的意义就是实现了多态的思想,也就是我们可以根据接口类型来设计API接口,所以这个API接口的适应性不仅可以适应目前实现的所有模块,也可以适应未来的模块来调用。 未来可能是界面最大的意义,这也是建筑师如此有价值的原因。因为一个好的架构师可以为界面设计一个框架,它在未来的很多年里仍然适用。 4面向对象中的依赖反转准则4.1高耦合度的模块关系,混沌设计的依赖关系。png包主导入" fmt "//= = = >;梅赛德斯-奔驰< = = = type Benz struct { } func(this * Benz)Run(){ fmt。Println("奔驰在跑...")}//= = = & gt;德国宝马汽车公司(Bavarian Motor Works) 但这种设计的问题是,规模小没什么问题,但一旦程序需要扩展,比如我现在想加一个丰田或者车手王五,那么模块之间的依赖度就会成倍增加,维护和平滑起来就像蜘蛛网一样越来越困难。 4.2通用层的反向依赖设计。png如上图所示,如果我们设计一个系统,我们把模块分为三层:通用层、实现层、业务逻辑层。 然后,我们首先定义通用层的模块和接口,这就需要设计接口的接口。然后,我们按照通用层依次实现实现层的各个模块。我们在编写实现层的代码时,其实只需要参考相应的通用层实现即可。实现每个模块与其他模块无关,这也符合上述细节的打开和关闭标准。 这样每个模块只依赖于对象的接口,而与其他模块无关,依赖单一。 该系统易于扩展和维护。 当我们指定业务逻辑时也是如此。只要我们引用通用层的接口来进行业务,通用层暴露的接口就是我们业务层可以使用的方法。然后通过多态离线,接口指针指向哪个实现模块,调用就是具体的实现方法,所以我们的业务逻辑层也是依靠通用编程。 我们称这个设计标准为依赖倒置标准。 我们来看看修改后的代码:package main import " fmt "/= = = = >;常规层


  • 全部评论(0)
资讯详情页最新发布上方横幅
最新发布的资讯信息
【技术支持|常见问题】1556原创ng8文章搜索页面不齐(2024-05-01 14:43)
【技术支持|常见问题】1502企业站群-多域名跳转-多模板切换(2024-04-09 12:19)
【技术支持|常见问题】1126完美滑屏版视频只能显示10个(2024-03-29 13:37)
【技术支持|常见问题】响应式自适应代码(2024-03-24 14:23)
【技术支持|常见问题】1126完美滑屏版百度未授权使用地图api怎么办(2024-03-15 07:21)
【技术支持|常见问题】如何集成阿里通信短信接口(2024-02-19 21:48)
【技术支持|常见问题】算命网微信支付宝产品名称年份在哪修改?风水姻缘合婚配对_公司起名占卜八字算命算财运查吉凶源码(2024-01-07 12:27)
【域名/主机/服务器|】帝国CMS安装(2023-08-20 11:31)
【技术支持|常见问题】通过HTTPs测试Mozilla DNS {免费源码}(2022-11-04 10:37)
【技术支持|常见问题】别告诉我你没看过邰方这两则有思想的创意广告! (2022-11-04 10:37)

联系我们
Q Q:375457086
Q Q:526665408
电话:0755-84666665
微信:15999668636
联系客服
企业客服1 企业客服2 联系客服
86-755-84666665
手机版
手机版
扫一扫进手机版
返回顶部