语言与golang语言运行速度_Golang语言情怀第13期 Go 语言设计模式 介绍

设计模式是什么

俗话说:站在别人的肩膀上,我们会看得更远。设计模式的出现可以让我们站在前人的肩膀上,通过一些成熟的设计方案来指导新项目的开发和设计,以便于我们开发出具有更好的灵活性和可扩展性,也更易于复用的软件系统。

设计模式的一般定义如下:

设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结,使用设计模式是为了可重用代码、让代码更容易被他人理解并且保证代码可靠性。

狭义的设计模式是指GoF在《设计模式:可复用面向对象软件的基础》一书中所介绍的23种经典设计模式,不过设计模式并不仅仅只有这23种,随着软件开发技术的发展,越来越多的新模式不断诞生并得以应用。设计模式一般包含模式名称、问题、目的、解决方案、效果等组成要素,其中关键要素是模式名称、问题、解决方案和效果。

模式名称(Pattern Name)通过一两个词来描述模式的问题、解决方案和效果,以便更好地理解模式并方便开发人员之间的交流,绝大多数模式都是根据其功能或模式结构来命名的;

问题(Problem)描述了应该在何时使用模式,它包含了设计中存在的问题以及问题存在的原因;

解决方案(Solution)描述了一个设计模式的组成成分,以及这些组成成分之间的相互关系,各自的职责和协作方式,通常解决方案通过UML类图和核心代码来进行描述;

效果(Consequences)描述了模式的优缺点以及在使用模式时应权衡的问题。

Go语言模式分类

在分类之前,我们需要明白模式的大体分类,以及他们都分别代表什么意思:

创建模式:对类的实例化过程的抽象。一些系统在创建对象时,需要动态地决定怎样创建对象,创建哪些对象,以及如何组合和表示这些对象。创建模式描述了怎样构造和封装这些动态的决定。包含类的创建模式和对象的创建模式。

结构模式:描述如何将类或对象结合在一起形成更大的结构。分为类的结构模式和对象的结构模式。类的结构模式使用继承把类,接口等组合在一起,以形成更大的结构。类的结构模式是静态的。对象的结构模式描述怎样把各种不同类型的对象组合在一起,以实现新的功能的方法。对象的结构模式是动态的。

行为模式:对在不同的对象之间划分责任和算法的抽象化。不仅仅是关于类和对象的,并是关于他们之间的相互作用。类的行为模式使用继承关系在几个类之间分配行为。对象的行为模式则使用对象的聚合来分配行为。

模式分类表:

所属类型模式名称模式简单定义
创建模式Abstract Factory抽象工厂提供用于创建相关对象系列的接口
Builder生成器使用简单对象构建复杂对象
Factory Method工厂方法将对象的实例化延迟到用于创建实例的专用函数
row 2 col 2对象池实例化并维护一组相同类型的对象实例
Singleton单例将类型的实例化限制为一个对象
结构模式Adapter适配器适配另一个不兼容的接口来一起工作
Bridge桥接将接口与其实现分离,以便两者可以独立变化
Composite组合封装并提供对许多不同对象的访问
Decorator装饰静态或动态地向对象添加行为
Facade外观使用一种类型作为许多其他类型的API
Flyweight享元运用共享技术有效地支持大量细粒度的对象
Proxy代理为对象提供代理以控制其操作
行为模式Chain of Responsibility职责链避免通过提供超过对象处理请求的机会来将发送方与接收方耦合
Command命令捆绑命令和参数以便稍后调用
Mediator中介者连接对象并充当代理
Memento备忘录生成可用于返回先前状态的不透明令牌
Observer观察者提供回调以通知事件/数据更改
Registry注册跟踪给定类的所有子类
State状态根据内部状态封装同一对象的不同行为
Strategy策略允许在运行时选择算法的行为
Template模板定义一个将某些方法推迟到子类的框架类
Visitor访问者将算法与其运行的对象分开
同步模式Condition Variable条件变量为线程提供一种机制,以暂时放弃访问以等待某些条件
Lock/Mutex锁定/互斥对资源实施互斥限制以获得独占访问权限
Monitor监视器互斥和条件变量模式的组合
Read-Write Lock读写锁定允许并行读取访问,但仅对资源的写入操作进行独占访问
Semaphore信号允许控制对公共资源的访问
并行模式N-BarrierN-二道闸阻止进程继续进行,直到所有N个进程都到达屏障
Bounded Parallelism有界并行完成大量资源限制的独立任务
Broadcast广播把一个消息同时传输到所有接收端
Coroutines协同程序允许在特定地方暂停和继续执行的子程序
Generators生成器一次性生成一系列值
Reactor反应服务处理程序使用I/O多路复用策略来同步、有序的处理一个或多个客户端并发请求
Parallelism并行完成大量独立任务
Producer Consumer生产者消费者从任务执行中分离任务
Scheduler调度器协调任务步骤
消息传递模式Fan-In扇入该模块直接调用上级模块的个数,像漏斗型一样去工作
Fan-Out扇出该模块直接调用的下级模块的个数
Futures & PromisesFutures & Promises扮演一个占位角色,对未知的结果用于同步
Publish/SubscribePublish/Subscribe将信息传递给订阅者
Push & PullPush & Pull把一个管道上的消息分发给多人
稳定模式BulkheadsBulkheads实施故障遏制原则(即防止级联故障)
Circuit-Breaker断路器当请求有可能失败时,停止流动的请求
Deadline截止日期一旦响应变缓,允许客户端停止一个正在等待的响应
Fail-Fast机制快速失败检查请求开始时所需资源的可用性,如果不满足要求则失败
Handshaking握手询问组件是否可以承受更多负载,如果不能,则请求被拒绝
Steady-State稳定状态为每一个服务积累一个资源,其它服务必须回收这些资源
剖析模式Timing Functions时序功能包装函数并记录执行
成例Functional Options功能选项允许给默认值创建clean API和惯用重载
反模式级联故障级联故障互连部件系统中的故障,其中部件的故障导致多米诺骨牌效应

参考资料:

Go语言设计模式

https://www.cnblogs.com/Survivalist/p/11207789.html

超赞的Go语言设计模式锦集

https://studygolang.com/articles/8230a53517e11f7565da4eea3bde8e59dfdd.png

Golang语言情怀

ID:wwwGolangLtd

 www.Golang.Ltd

游戏服务器架构丨分布式技术丨大数据丨Go语言学习

8933ccf5488e612ed95880de1a7718eb.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/464830.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

苦练IoT应用开发,还能加速变现,这个机会别错过

都说人间大事,不过吃喝二字。厨房经济近年来显示出了巨大发展潜力,智能厨电已成为潮流趋势。智慧厨电究竟是如何——让厨房小白做出一顿可口大餐?让懒人摆脱厨房油烟和洗碗的困扰?让怕冷的人喝到永远55℃的热水?……在…

android人脸识别demo_零门槛解决Windows人脸识别应用开发难题

自人脸识别免费SDK——ArcFace3.0上线以来,凭借对人脸识别、活体检测、年龄检测、性别检测等核心算法模型进行全面升级,大幅提升算法鲁棒性,显著降低接入门槛,同时支持Windows、iOS、Android(包含Android10&#xff09…

Visual Studio会让嵌入式开发变得更香

在几个月之前,我一直非常喜欢用Source Insight看代码,主要是习惯了原来的风格。从Source Insight 转到vscode 的原因是,在腾讯使用samba连接Source Insight看代码非常非常卡,让我觉得很难受。然后是在同事的建议下更换了vscode,里…

现实世界的Windows Azure:采访InishTech的销售及市场部主管Andrew O’Connor

MSDN: 告诉我们关于你们公司的信息以及您为Windows Azure创建的解决方案。O’Connor: InishTech 有点不寻常。我们的软件许可和保护服务(SLPS)平台是一个传统的多租户Windows Azure应用程序,利用Windows Azure SDK、 Windows Azure Dev Fabri…

珠海半导体公司招聘

受一个朋友所托,帮忙发一个招聘信息公司名字:珠海极海半导体有限公司上班地点:广州岗位名称:FAE工程师岗位要求:薪资:15K左右,会根据实际面试情况做相应调整。一些聊天内容的消息供大家参考&…

Linux同步原语系列-spinlock及其演进优化

1. 引言通常我们的说的同步其实有两个层面的意思:一个是线程间的同步,主要是为了按照编程者指定的特定顺序执行;另外一个是数据的同步,主要是为了保存数据。为了高效解决同步问题,前人抽象出同步原语供开发者使用。不仅…

linux环境部署python3+django

1. 确定Linux安装C/C编译器,在线安装: yum install gcc gcc-c autoconf automake 2. 安装依赖环境: yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel libffi-devel 3. …

hp-socket 文本跟图片同时发送_文本、截图和应用,这样「包装」一秒变美观

社交网络被发明出来的一个重要目的就是分享,无论是所见所闻还是喜怒哀乐,亦或是脑海中突然迸发出的一段妙言,某个转瞬即逝的精彩瞬间,一篇深度好文,一个在少数派看到的绝赞应用……分享内容丰富多彩,相比之…

poj2041

简单题 View Code #include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>#include <algorithm>using namespace std;#define maxn 30char order[maxn];char st[maxn];int l;void work(char ch){char x;int d;switch (ch) …

[转]Angular2 Material2 封装组件 —— confirmDialog确定框

本文转自&#xff1a;https://www.jianshu.com/p/0c566fc1730d 环境&#xff1a; Angular 4.0.0 Angular2 Material2 2.0.0-beta.3 node v7.4.0 npm 4.0.5 使用Dialog封装confirmDialog确定框 源代码 来&#xff0c;首先来看效果图~ 删除例子确定删除框点击确定后返回值1.定义通…

项目实战|100个蓝牙接收器发货了

还记得之前写的这篇文章不&#xff1a;《一个蓝牙实战项目的掏肺总结》&#xff0c;这个项目最近做完了&#xff0c;交了100套出去&#xff0c;这是发货前的大合照&#xff1a;做完此项目&#xff0c;有些许收获&#xff0c;在此分享给大家。东西虽简单&#xff0c;但它依然是一…

深圳的冬天真的来了

天气预报说&#xff0c;明天深圳的天气会很低。热了一整年&#xff0c;这次一定是真的了&#xff0c;大家出门记得穿厚一些。

date js 半年_moment.js 搜索栏获取最近一周,一个月,三个月,半年,一年时间

统计时间label: 统计时间,name: countTime,type: select,data: [{value: 0,text: 最近一周},{value: 1,text: 一个月},{value: 2,text: 三个月},{value: 3,text: 半年},{value: 4,text: 一年}]实现方式searchValue为搜索栏所选所填内容&#xff0c; 以及作为搜索和接口调用条件…

华为eudemon 200E的hrp双心跳热备配置

本文为大家介绍使用两台华为Eudemon200E防火墙实现双机双心跳的HRP热备的配置实例&#xff0c;主要的知识点包括&#xff1a;华为防火墙HRP、VRRP的配置&#xff0c;定义防火墙区域。 一、网络拓扑&#xff1a;二、配置要求&#xff1a; 1、两台防火墙为E200E-A和E200E-B&#…

2021 年 Linux 界的 12 件大事

2021年即将结束了&#xff0c;今天就和大家分享一些来自Linux世界最重要的大事&#xff0c;这些事件大大影响了Linux用户&#xff1a;1、理查德斯托曼回归2019年&#xff0c;自由软件基金会(Free Software Foundation)创始人理查德斯托曼&#xff08;Richard Stallman&#xff…

关于Treap的学习感受

好了我就很愉快的回来补坑了~ Treap也是一种平衡树&#xff0c;它较普通二叉查找树而言&#xff0c;每个节点被赋予了一个新的属性&#xff1a;优先级&#xff08;没错就是类似优先队列的优先&#xff09;&#xff0c;对于Treap中的每个结点&#xff0c;除了它的权值满足二叉查…

2022年考研结束了

为期两天的研究生考试结束了。我没参加研究生考试&#xff0c;所以对研究生考试的压力不从得知&#xff0c;我从一个外人的角度来看&#xff0c;这无非就是一个简单的考试&#xff0c;考上了欢喜雀跃&#xff0c;考不上嘛&#xff0c;我就会说&#xff0c;大不了来年再考一次&a…

挂“洋头”卖奶粉,澳优还要欺骗好久

澳优奶粉近期被质疑非进口产品&#xff0c;公司总部实为湖南一家贴牌商。该奶粉生产商澳优乳业公司回应称其为“国外产品与本国品牌相结合”的国际化企业。但奶粉包装仍被质疑误导消费者&#xff0c;且售价偏高&#xff0c;澳优方称“与其高端品质相比只属于中上水平”&#xf…

mysql通过局域网访问数据库_MySQL数据库之局域网内访问同一个mysql数据库

本文主要向大家介绍了MySQL数据库之局域网内访问同一个mysql数据库 &#xff0c;通过具体的内容向大家展现&#xff0c;希望对大家学习MySQL数据库有所帮助。局域网内访问同一个mysql数据库。一、运行cmd&#xff0c;输入mysql -u root -p。二、输入mysql数据库密码&#xff0c…

约翰·冯·诺依曼:一个向上帝买了挂的男人!!

来源|David 小咸鱼/新智元约翰冯诺依曼是20世纪最有影响力的人物之一。从原子弹&#xff0c;到计算机、再到量子力学、气候变化&#xff0c;你可能很难再找出像这样对我们今天的世界和生活影响更大的科学家了。在20世纪的天才中&#xff0c;有几个杰出的人物&#xff1a;爱因斯…