保健励志美文体育育儿作文
投稿投诉
作文动态
热点娱乐
育儿情感
教程科技
体育养生
教案探索
美文旅游
财经日志
励志范文
论文时尚
保健游戏
护肤业界

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

  《LearnDataStructuresandAlgorithmswithGolang》作者:BhagvanKommadi结构设计模式
  结构设计模式描述实体之间的关系。它们用类和对象组成大型结构。这些模式是用一种灵活的方式创建带有不同系统块的一个系统。适配器(adapter),桥接(bridge),组合(composite),装饰器(decorator),门面(facade),享元(flyweight),私有类数据(privateclassdata),和代理(proxy)都是GoF(GangofFour)结构设计模式。私有类数据模式是本节讨论的另一种设计模式。
  我们将在后面几节里看到适配器和桥接设计模式。
  适配器(Adapter)
  适配器模式提供了一个带有API客户端所需接口的包装器,以链接不兼容的类型并充当两种类型之间的转换器。这个适配器使用一个类的接口成为另一个带有兼容接口的类。当需求发生变化时,会出现由于不兼容的接口而需要改变类功能的情况。
  当一个类定义自己的接口给适配器类实现的下一级模块接口时,使用适配器模式,可以遵守依赖倒置原则。委托是适配器模式使用的另一个原则。处理源到目标的多种格式转换是应用适配器模式的场景。
  适配器模式由目标(target),适配者(adaptee),适配器(adapter),还有客户端(client):目标是客户端调用的接口,以及调用在适配器和适配者上面的方法。客户端想要兼容的由适配器实现的接口。适配器转换不兼容的适配者接口到客户端想要的接口。
  假如你有一个带有process方法的IProcessor接口,适配器类实现这个process方法,并且有一个适配者(Adaptee)实例做为属性(attribute)。这个适配者(Adaptee)类有一个convert方法和一个adapterType实例变量。开发者在使用API客户端调用process接口方法时会调用适配者(Adaptee)的convert方法。代码如下:mainpackagehasexamplesshowninHandsOnDataStructuresandalgorithmswithGobookpackagemainimportingfmtpackageimport(fmt)IProcessinterfacetypeIProcessinterface{process()}AdapterstructtypeAdapterstruct{adapteeAdaptee}
  适配器(Adapter)类有一个process方法,此方法调用适配者(adaptee)上convert方法:Adapterclassmethodprocessfunc(adapterAdapter)process(){fmt。Println(Adapterprocess)adapter。adaptee。convert()}AdapteeStructtypeAdapteestruct{adapterTypeint}Adapteeclassmethodconvertfunc(adapteeAdaptee)convert(){fmt。Println(Adapteeconvertmethod)}mainmethodfuncmain(){varprocessorIProcessAdapter{}processor。process()}
  运行以下命令:gorunadapter。go
  在下一节里让我们看看桥接(Bridge)模式。
  桥接(Bridge)
  桥接将抽象和实现进行解耦。抽象基类可以子类化以提供不同的实现和允许容易地改变实现细节。这个接口,即一个桥接(bridge),有助于使具体类的功能独立于接口实现类。桥接模式允许实现细节在运行时进行改变。
  桥接模式展示了更偏爱组合而不是继承的这一原则。它有助于子类比较多且彼此正交的(orthogonal)情况。应用的运行时绑定,正交类层次结构的映射,平台独立性实现都是桥接模式的适用场景。
  桥接模式组件是抽象(Abstraction),细化的抽象(Refinedabstraction),实现者(implementer)和具体实现者(concreteimplementer)。抽象(Abstraction)是一个抽象类实现的接口,客户端调用这个抽象类的具体实现上的方法。抽象(Abstraction)与实现维护有(hasa)的关系,而非是(isa)的关系。这个有(hasa)的关系是组合来维护的。抽象有一个对实现的引用。细化的抽象提供了比抽象更多的变体。
  假如IDrawShape是带drawShape方法的接口。DrawShape类实现了IDrawShape接口。我们创建一个带有drawContour方法的IContour桥接接口。DrawContour类实现了IContour接口。DrawContour类包含x,y,factor属性以及shape属性(DrawShape的一个实例)。它实现了IContour桥接接口的drawContour方法。此方法调用shape实例的drawShape方法。
  以下代码展示了桥接实现:mainpackagehasexamplesshowninHandsOnDataStructuresandalgorithmswithGobookpackagemainimportingfmtpackageimport(fmt)IDrawShapeinterfacetypeIDrawShapeinterface{drawShape(x〔5〕float32,y〔5〕float32)}DrawShapestructtypeDrawShapestruct{}
  drawShape方法
  这个drawShape方法按给出的坐标绘制形状,如下面代码所示:DrawShapestructhasmethoddrawShapewithfloatxandycoordinatesfunc(drawShapeDrawShape)drawShape(x〔5〕float32,y〔5〕float32){fmt。Println(DrawingShape)}IContourinteracetypeIContourinterface{drawContour(x〔5〕float32,y〔5〕float32)resizeByFactor(factorint)}DrawContourstructtypeDrawContourstruct{x〔5〕float32y〔5〕float32shapeDrawShapefactorint}
  drawContour方法
  这个DrawContour类的drawContour方法会调用shape实例的drawShape方法,下面代码显示:DrawContourmethoddrawContourgiventhecoordinatesfunc(contourDrawContour)drawContour(x〔5〕float32,y〔5〕float32){fmt。Println(DrawingContour)contour。shape。drawShape(contour。x,contour。y)}DrawContourmethodresizeByFactorgivenfactorfunc(contourDrawContour)resizeByFactor(factorint){contour。factorfactor}mainmethodfuncmain(){varx〔5〕float32{1,2,3,4,5}vary〔5〕float32{1,2,3,4,5}varcontourIContourDrawContour{x,y,DrawShape{},2}contour。drawContour(x,y)contour。resizeByFactor(2)}
  运行下面的命令:gorunbridge。go
  我们在后面几节会看到组合,装饰器,门面和享元模式。
  下一篇:《Golang学习数据结构和算法》中文版第4篇
  上一篇:《Golang学习数据结构和算法》中文版第2篇

钢琴练习日记手机录视频时内录电钢琴声音,戴耳机弹琴不扰民2020年4月买电钢琴到现在满两年了,两年来一直仅仅使用了其中几种功能:一是用电钢琴自带的三角钢琴音色,学习弹钢琴,练习基本功,学弹钢琴曲:二是使用电钢琴自带的电子节拍器,跟节……夏雨雨的作文400字汇编5篇在日常学习、工作抑或是生活中,大家都尝试过写作文吧,借助作文可以宣泄心中的情感,调节自己的心情。为了让您在写作文时更加简单方便,下面是小编整理的夏雨雨的作文400字5篇,欢迎阅……五年级想象作文吹泡泡的遐想401班袁添每天过着同样的生活,有什么意义。我自言自语地说。我把头伸出窗外,眯着眼睛感受着阳光,尽量让自己想快乐的事。我看着蓝蓝的天,总觉得缺少了什么。对,缺少那些五颜六色的泡……追逐亮剑精神成长日记一名剑客在一个狭小的巷子里遇到了天下第一剑客,这时他该怎么做呢?是俯首称臣让到一旁,还是亮出宝剑准备做最后一搏?我认为,他应该亮出宝剑做最后的搏斗。逢敌必亮剑!这句话出自……美在身边小学优秀作文每个星期天的。晚上,爸爸都会带我去文二路的博库书城去看两小时的书。有一次,我看完书和爸爸下楼来推车,我看见一个盲人坐在地上认真地拉着二胡,同时也向人们索取着。看到这情景,……5G将不可避免地颠覆传媒和娱乐产业前景?来源综艺、光明日报、广电猎酷、纪实观察、流媒体网、媒介360等在未来万物互联的时代,5G到底会对媒体及娱乐行业产生怎样颠覆式的影响?本文带你了解。5G风暴,即将来临……实用的描写小学生开学的作文400字6篇在学习、工作乃至生活中,大家都不可避免地要接触到作文吧,作文是经过人的思想考虑和语言组织,通过文字来表达一个主题意义的记叙方法。那么一般作文是怎么写的呢?下面是小编整理的描写小……自信带给我微笑作文范文自信是一副眼镜,戴上它你就会看到自己胜利时的美景;胜利是一幅助听器,戴上它你就会听到属于自己的胜利的凯歌。多少年来自信都是无数人们的好朋友,而说起我和自信的故事那还真有趣呢!……又是一夜平安夜作文400字冬天是我最喜欢的季节,因为它不仅有皑皑白雪,还有我再喜欢的几个节日圣诞节、元旦,今天,又是我十分期盼的日子,圣诞前夕平安夜。小时候,我最喜欢的日子不是12月25日,而是1……补习风波五年级作文周六我还在甜美的睡梦中,突然雷声阵阵响起:‘起床了’,‘起床了’!已经七点半你怎么还睡在床上?八点的写作课你要迟到了。我一下被惊醒,睡眼朦胧的看着母亲,母亲正瞪着大眼对我说‘快……动物园游记的作文导语:不一会儿,在我们的谈笑声中到了动物园。下面是小编整理的一些关于动物园的优秀作文,欢迎查阅,谢谢!篇一:游动物园本以为到了动物园,看到了动物,我就会开心。没想到眼里却……一科技公司小红书上发布虚假种草笔记!被罚8万元小红书医美项目500粉,图文直发10元!因帮他人刷单炒信,通州一科技公司被罚款8万元。近日,通州区市场监管局查处首起帮助其他经营者网络刷单炒信的经济违法案件。今年1……
五一写景作文500字这是一个阳光明媚的早上,爸爸、妈妈带着我和妹妹去绍兴五泻风景区游玩。走进景区,满眼都是翠绿。一排排高大挺拔的树木,一株株嫩绿的小草,无处不显示着春的生机。在导游小姐的引导……暑假我来了作文450字精选暑假迈着快乐的步伐向我们走来了。下面是语文迷整理的暑假我来了!作文,希望对你有帮助。暑假我来了作文1:考试过后,一种令人放松、开心的心情涌遍全身,为什么?因为暑假迈……八年前的手机oppoN1OPPON1的外形设计算不上经典优雅,由于其比较特别的三围和双层边框的设计,就算其采用的是5。9英寸屏幕,整体的无雾面材质配上金属边框,视觉与手感都不错。N1的重量达到213g……狗尾巴草的自述作文600字我是一株狗尾巴草,生长在大树脚下,成天唱着ldquo;没有花香,没有树高rdquo;的歌谣。崇拜偶像我刚有记忆时,大树便已挺拔地出现在我眼前,我对它好生羡慕与敬佩,……有关时间的作文时间不曾停止,我不曾放弃时间不曾停止,我不曾放弃ldquo;东流逝水日月如梭rdquo;伴随着时光的脚步这短暂的秋季也到了秋收的时候了。冬末春初之时我在和蔼的校长你这寻得了创立文学社的机会……价值作文700字人生的价值体现在很多方面,实现价值的途径也各不相同,人们所理解的理解的价值也各不同。通过这几天看凡尔纳写的《八十八环游地球》,我对价值观有了深刻的理解,文章讲述了福格先生对他牌……同学说到同学,每个人都会想起一大堆,小学的同学,中学的同学,大学的同学,男同学,女同学,经常见面的同学,不经常见面的同学,出人头地的同学,默默无闻的同学等等。同学是天定一生的……初中写景作文赞美秋天赞美秋天秋天是美好的!秋天是和谐的!秋天是奇妙的!让我们打开秋天的大门,走进秋天吧!走进秋天的果园,果实们个个都穿上了新装。红红的苹果扯着嗓子喊:太冷了,我要穿红棉……大学生工程造价实习日记范文日记1今天是我的生产实习第一天,和第一次上班一样大清早,在很快的熟悉办公室布局后就和几个刚上班的我的新同事一块在打扫办公室的卫生。打扫完卫生同事向我介绍了公司的更详细的情……厉害了我的国观后感例文导语:大型纪录电影《厉害了,我的国》的播出,备受大家关注。该影片将党的十八大以来中国的发展和成就,以纪录片的形式呈现在大银幕上,通过镜头展现强国风采,传递中国力量。下面由小编为……使iPhone电池全天续航更耐揍虽然现在的iPhone电量是越来越给力了,但高强度地使用手机让iPhone电量再厚也不耐抗,基于此,我给出了一些使用iPhone的建议,让咱们的iPhone电量更持久。如……为什么有些手机用自带管家清理出来的垃圾只有几百兆,而第三方软感谢您的阅读!每一次在电脑上清理缓存垃圾的时候,都会显示几个G甚至十几个G,但是清理完成后,发现基本上没有什么变化。后来我才知道,原来只是这些应用软件耍的小心思,让你感觉……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网