范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

Golang学习数据结构和算法中文版第3篇

  《Learn Data Structures and Algorithms with Golang》作者: Bhagvan Kommadi结构设计模式
  结构设计模式描述实体之间的关系。它们用类和对象组成大型结构。这些模式是用一种灵活的方式创建带有不同系统块的一个系统。适配器(adapter),桥接(bridge),组合(composite),装饰器(decorator),门面(facade),享元(flyweight),私有类数据(private class data),和代理(proxy)都是GoF(Gang of Four)结构设计模式。私有类数据模式是本节讨论的另一种设计模式。
  我们将在后面几节里看到适配器和桥接设计模式。
  适配器(Adapter)
  适配器模式提供了一个带有API客户端所需接口的包装器,以链接不兼容的类型并充当两种类型之间的转换器。这个适配器使用一个类的接口成为另一个带有兼容接口的类。当需求发生变化时,会出现由于不兼容的接口而需要改变类功能的情况。
  当一个类定义自己的接口给适配器类实现的下一级模块接口时,  使用适配器模式,可以遵守依赖倒置原则。委托是适配器模式使用的另一个原则。处理源到目标的多种格式转换是应用适配器模式的场景。
  适配器模式由目标(target), 适配者(adaptee),适配器(adapter),还有客户端(client):目标是客户端调用的接口,以及调用在适配器和适配者上面的方法。客户端想要兼容的由适配器实现的接口。适配器转换不兼容的适配者接口到客户端想要的接口。
  假如你有一个带有process方法的IProcessor接口,适配器类实现这个process方法,并且有一个适配者(Adaptee)实例做为属性(attribute)。这个适配者(Adaptee)类有一个convert方法和一个adapterType实例变量。开发者在使用API客户端调用process接口方法时会调用  适配者(Adaptee)的convert方法。代码如下:  //main package has examples shown // in Hands-On Data Structures and algorithms with Go book package main // importing fmt package import (   "fmt" ) //IProcess interface type IProcess interface {    process() } //Adapter struct type Adapter struct {   adaptee Adaptee }
  适配器(Adapter)类有一个process方法,此方法调用适配者(adaptee)上convert方法://Adapter class method process func (adapter Adapter) process() {   fmt.Println("Adapter process")   adapter.adaptee.convert() } //Adaptee Struct type Adaptee struct {   adapterType int } // Adaptee class method convert func (adaptee Adaptee) convert() {   fmt.Println("Adaptee convert method") } // main method func main() {   var processor IProcess = Adapter{}   processor.process() }
  运行以下命令:go run adapter.go
  在下一节里让我们看看桥接(Bridge)模式。
  桥接(Bridge)
  桥接将抽象和实现进行解耦。抽象基类可以子类化  以提供不同的实现和允许容易地改变实现细节。这个接口,即一个桥接(bridge),有助于使具体类的功能独立于接口实现类。桥接模式允许实现细节在运行时进行改变。
  桥接模式展示了更偏爱组合而不是继承的这一原则。它有助于子类比较多且彼此正交的(orthogonal)情况。应用的运行时绑定,正交类层次结构的映射,平台独立性实现都是桥接模式的适用场景。
  桥接模式组件是抽象(Abstraction),细化的抽象(Refined abstraction),实现者(implementer)和具体实现者(concrete implementer)。抽象(Abstraction)是一个抽象类实现的接口,客户端调用这个抽象类的具体实现上的方法。抽象(Abstraction)与实现维护有(has-a)的关系,而非是(is-a)的关系。这个有(has-a)的关系是组合来维护的。抽象有一个对实现的引用。细化的抽象提供了比抽象更多的变体。
  假如IDrawShape是带drawShape方法的接口。DrawShape类实现了IDrawShape接口。我们创建一个带有drawContour方法的IContour桥接接口。DrawContour类实现了IContour接口。DrawContour类包含x,y,factor属性以及shape属性(DrawShape的一个实例)。它实现了IContour桥接接口的drawContour方法。此方法调用shape实例的drawShape方法。
  以下代码展示了桥接实现://main package has examples shown // in Hands-On Data Structures and algorithms with Go book package main // importing fmt package import (   "fmt" ) //IDrawShape interface type IDrawShape interface {   drawShape(x[5] float32,y[5] float32) } //DrawShape struct type DrawShape struct{}
  drawShape 方法
  这个drawShape 方法按给出的坐标绘制形状,如下面代码所示:// DrawShape struct has method draw Shape with float x and y coordinates func (drawShape DrawShape) drawShape(x[5] float32, y[5] float32) {   fmt.Println("Drawing Shape") }  //IContour interace type IContour interface {   drawContour(x[5] float32 ,y[5] float32)   resizeByFactor(factor int) } //DrawContour struct type DrawContour struct {   x[5] float32   y[5] float32   shape DrawShape   factor int }
  drawContour方法
  这个Draw Contour类的drawContour方法会调用shape实例的drawShape方法,下面代码显示://DrawContour method drawContour given the coordinates func (contour DrawContour) drawContour(x[5] float32,y[5] float32) {   fmt.Println("Drawing Contour")   contour.shape.drawShape(contour.x,contour.y) } //DrawContour method resizeByFactor given factor func (contour DrawContour) resizeByFactor(factor int) {   contour.factor = factor } // main method func main() {   var x = [5]float32{1,2,3,4,5}   var y = [5]float32{1,2,3,4,5}   var contour IContour = DrawContour{x,y,DrawShape{},2}   contour.drawContour(x,y)   contour.resizeByFactor(2) }
  运行下面的命令:go run bridge.go
  我们在后面几节会看到组合,装饰器,门面和享元模式。
  下一篇:《Golang学习数据结构和算法》中文版 第4篇
  上一篇:《Golang学习数据结构和算法》中文版 第2篇

最新警方调查证明都美竹不是女侠,但吴亦凡依然凉凉文大白大家好,我是大白,欢迎来到我的白话天下。昨天晚上开始,就有好多朋友专门加了我的微信,让继续聊聊吴亦凡的事。因为关于吴亦凡事件,第一阶段的警方调查结果出来了。虽说目前还没有直接如何看待各类医药教辅保健类广告占据百度等搜索引擎?曾经,互联网给人们的生产生活带来了极大方便,人们不知道的知识可在网上查找,想要有关疾病及病理原因也可在网上找得到,想为小孩找培训老师也立即可以找到。但现在,我们不少人发现,要在百度小孩读书有天赋吗儿子小学读书属于中下水平,在几兄弟小孩中,年节聚在一起,老是被重点教育,妻子听了不爽,儿子默不作声。几个玩得好的同学的同年级小孩,一考试就会问我儿子成绩,儿子倒是会说出成绩。作为父流量也有所有权?近期在很多营销文章里都会看到流量所有权这个名词,小如深入地了解了一下,发现它其实与私域流量的概念很相近。流量所有权可以理解为流量的主人,流量的最终掌握者。在传统广告营销盛行的年代,抖音的私域流量是什么?抖音严格来说属于一个开放的流量空间。抖音在刚开始运作的时候基本上没有私域流量。随着抖音功能的不断升级,群聊粉丝群的上线,抖音的私域流量才逐渐形成。抖音私域流量池的搭建,对于商家来说主播带货,已走到末路罗永浩还清了他的6亿债务,以主播为核心的直播时代也随之终结。直播行业正式进入新的阶段。过去的一年里,直播倍受品牌关注,它帮助很多企业渡过了疫情的寒冬,却也让不少企业死于它的暖阳下。燕窝事件之后,辛巴好像就再也站不起来了9月2日,有粉丝打开辛有志快手账号主页面发现,辛巴直播间又一次被封禁了!直播封禁说明显示,该用户将于9月8日解封,平台方就这一次封禁的原因,并未发出任何公告,但猜测与辛有志之前叫板热点解析从丰巢收费事件,看智能快递柜未来的发展近期,丰巢快递柜超时收费的时间炒得沸沸扬扬。自4月30日,丰巢宣布对非会员用户实行超时收费,快件免费存放12小时后,每12小时收取0。5元超时保管费,3元封顶。这一举动迅速引起了极医疗机器人,未来重要的医疗资源?医疗资源是指提供医疗服务和生产要素的总称,通常包括人员医疗费用医疗机构医疗床位医疗设施和装备知识信息和技能等。经过一次范围广,持续时间长的疫情冲击,很多人对医疗资源有了进一步认知,工业化社会的食品安全保障,智能操控检测设备,杜绝食品中毒现象民以食为天,食品安全自然也是重中之重。日常生活中,人们从市场上购买食品,如果没有突发食品安全新闻出来,大家都不会想到食品安全问题,且只要出现在超市货架上,我们普遍认为它是安全的。当10个损坏相机的技巧教你如何损坏一台相机好的设备千千万万种毁坏他们的办法基本相同想知道怎样能减少相机的寿命加快你更换相机的速度吗?今天给大家辛辛苦苦整理的这十个小技巧你可要记住喽1。自动对焦时拧对焦环在相机自动对焦模式下
亚马逊ERP系统是什么?如何管理亚马逊店铺?赛狐erp是美云集网络科技有限公司基于多年的跨境电商软件服务经验,为亚马逊卖家量身打造的一款精细化运营系统。赛狐为亚马逊卖家提供一站式服务,主要功能有运营分析财务核算广告管理进销存香港维多利亚港上空出现的UFO究竟是什么?从80年代起,香港每年都会有UFO的目击事件报告,不过这么多年来,也从来没有人拍到清晰的UFO图片,也没有人目击过UFO降落。所以所有的真相还有待后续的相关公告。12月6日下午4点如何评价Windows10呢?题主您好,小白系统为您解答问题,如果对您有帮助,请关注小白系统头条号全新的Windows10将是一个大一统的操作系统,无论任何设备都能获得极佳的体验,而且微软正式修改了Window现在去营业厅买手机,老是要送个号码,用一段时间可以取消,这是什么套路啊感谢您的阅读!办卡容易,但是注销困难!虽然欠费停机三个月后,运营商会对你的电话卡进行注销,可是所产生的欠费和违约金可需要你支付,你不知付的话,不但会被标上黑名单用户,而且可能将你拉尼康D800还能打吗?尼康D800自2012年初上市,后续陆续又发布了该系列的D800ED810D810AD850,我于2014年初购买D800,现在依然是我拍照片的主力。拥有1424F2。8G2470富可敌国!苹果市值逼近3万亿,库克打造了乔布斯无法做到的神话谈起苹果,很多人都说乔布斯之后再无苹果,那么事实上真的如此吗?并不然!要看你用什么样的眼光去看它。你说如今的iPhone13没有设计吗?它却能够卖爆销量,甚至官网都被中国消费者抢到iPhone将会支持微软xCloud云游戏目前微软的xCloud云游戏已经来到众多的设备平台上,比如说PC手机平板以及XboxOne都可以通过xCloud游玩到新一代的游戏,不过对于苹果用户来说却不是一个好消息,原因是之前听力下降不戴助听器可以吗?您好!如果听力下降已经定性,建议您早发现早干预,因为听力下降了生活中很多声音听不到了或者变弱,会影响交流,会导致听觉功能退化,分辨能力下降。建议您早期佩戴助听器,延缓听力的衰退,可各品牌5000元以上的手机盘点,哪个更优秀?如今各厂商都想在高端手机领域分一杯羹,纷纷发布5000元以上的手机,而5000元就成了手机价位的分水岭,在市面上超过5000元的基本都是各家品牌的高端旗舰机型,也是各厂商科技实力的为电动爹加装柴暖!那群盖着被子开车的车主也扛不住了近日,在北方地区,有一些车主开始为自己的电动汽车加燃油空调。这些人大部分都是出租车司机或者网约车司机,其中还有红旗的eQM5为了吸引司机换车,宣传可以免费为车主加装柴暖。很多网友都哪个瞬间让你突然觉得社会生产力进步了很多?高举毛泽东思想伟大祺帜,坚定走社会主义道路,使全国人民共同富裕,使共产党人的初心。毛主席时代社会生产力发生空前史诗般的进步,是新中国不同于旧社会质的巨变,是人类社会与一切剥削社会形