您当前的位置:首页 > 电脑百科 > 程序开发 > 编程百科

开发中经常使用的5种设计模式

时间:2020-11-10 10:16:54  来源:  作者:

提到设计模式,很多人都会觉得老生常谈,有些人觉得设计模式很有必要,有些人觉得设计模式没那么重要,那么我们在工作中是否应该重视设计模式呢?我们是否应该将设计模式大量应用到我们的生产过程中呢?

开发中经常使用的5种设计模式

如果你从未听说过设计模式,我敢打赌你一定不是一个合格程序员。这就好比一个人说他自己是数学家,但是他连勾股定理都没听过,这怎么可能?

工厂模式

这是一个最基础的设计模式,也是最常用的设计模式,这是一个我们平时一直在使用,但却不知道自己在使用的设计模式。

工厂模式故名思意就是一个加工厂,不同于现实的是,这里生产的不是衣服,皮鞋,裤子等,而是我们面向对象编程中最重要的对象。

现实中工厂的好处我们都知道,不仅可以批量生产,还可以批量定制,因为有着不同的模具,它可以生产出人们需要的各种类型的产品。

软件开发中,我们更关注的是使用对象的方法,至于对象如何创建的,我们并不是很关心,因此,抽象工厂解决了我们的问题。我们只需要订制我们需要的产品功能接口,然后让工厂按照我们的接口,也就是实现接口生产对象即可。

通过这样的调用,我们的产品如果有问题的话,可以随时召回,可以随时被工厂补丁修补,实现了产品的灵活扩展。

适配器模式

现实中,我们经常给手机充电,而我们使用的就是电源适配器,为什么叫适配器呢?因为它不仅可以给我们自己的手机充电,也可以给别人的手机充电,甚至还可以给其它用电设备充电,因为它可以适应各种充电设备,所以叫做适配器。

软件开发中,我们几乎或者不可能离开数据库而去开发一款应用,那么选择什么数据库是我们最需要关心的,因为如果选择错了,可能后期在性能上就会出现瓶颈,那么有没有一种办法可以让我们在不修改代码,或者修改很少的代码情况下进行数据库的无缝切换呢?答案就是适配器模式。

我们首先定义好适配器接口,然后让各种数据库实现我们定义好的接口,我们在代码中使用接口中定义的方法,这样当我们想要切换数据库的时候,只要将该数据库实现对应接口的方法,我们就可以完成数据库的适配,就可以无缝连接。

观察者模式

观察者模式,又叫做通知模式,是一种一对多的模式。现实中,当校长或者老师在台上发布一个命令的时候,广播喇叭就会将命令传达给每个学生,学生们听到命令的时候,都会有自己的反应,校长或者老师不必向学生一个个传达,因为广播喇叭会把命令传给学生,这里广播喇叭就是一个观察者,而老师和校长就是被观察者,学生们就是被通知对象,因此观察者模式也叫做发布订阅模式。

在软件开发中,比如我们的产品有这样一个功能,用户下单支付成功之后,就会发送一条短信通知用户,如果之后希望不仅发送短信,还需要发送邮件,还需要语音通知,在这样的情况下,我们就可以采用观察者模式,我们将支付成功信息放入到消息队列中,至于发短信还是发邮件,由各个业务模块订阅消息队列自己处理。这样在订单模块里面,就不需要一个个通知短信模块,邮件模块了。

装饰器模式

现实生活中,一般情况下一个人换了一件衣服之后,我们依然可以认出他,衣服就是他的装饰,说明装饰并不影响一个人的容貌,也就是不影响这个人的功能,但是通过穿着一件高档外衣,却可以提升一个人的气质,这就是装饰的作用,而装饰器模式就是通过装饰一个对象而不改变对象来让这个对象更强大。

举一个软件开发中的案例,比如我们已经设计好一个短信发送功能,并且经过测试和线上测试这个功能是没有任何问题的,但是现在有一个新的需求,要求发送短信的时候,还能语音提醒,我们如何能够在不影响原有的功能情况下,实现这个功能呢,这个时候我们就可以使用装饰器,也就是给短息发送类装饰一个语音功能,让它不仅可以发送短信,此外还可以实现语音发送的功能。

策略模式

策略故名思意就是实现目标方案的集合,简单来说就是各种方法的集合,他们都是用来实现一件事情的。

软件开发中,一个对象对不同场景采用不同的策略去实现同一个功能,就是策略方法,如果你听说过多态,就会发现它和多态的定义很像,不同的是多态是不同对象对同一操作的不同的处理方法,而策略模式是同一个对象对同一个操作采用不同的策略进行处理操作。

比如,我们有一个国庆7天游的项目,起始点和目的地都是从北京到莫斯科,但是可以采用不同的策略,可以飞机,可以火车,可以自驾,同一个梦想,不同的实现方式。

淘宝首页的千人千面也是策略模式,都是显示商品,面对不同的人,显示的就是不同的商品,这就是由策略决定的。

总结

如果你足够细心的话,软件开发中的设计模式并不是凭空产生的,它一定是来源于生活,其实,任何知识的产生都是来源于生活,只不过我们经过学习提炼之后,将它高于生活。

设计模式不是万能的,它并不能帮助你解决所有问题,但是它可以帮助你解决大部分问题,并且在编码中使用设计模式的话,你会发现,你的代码看起来会更加清晰,更加有条理。

学习设计模式,使用设计模式并不是最终的目的,我们的最终目的是无招胜有招,当你把所有的设计模式全忘记的时候,但是在编码中却能运用它们的时候,你才算没白学设计模式。



Tags:设计模式   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
一、概述观察者模式,又可以称之为发布-订阅模式,观察者,顾名思义,就是一个监听者,类似监听器的存在,一旦被观察/监听的目标发生的情况,就会被监听者发现,这么想来目标发生情况到观察...【详细内容】
2021-12-13  Tags: 设计模式  点击:(16)  评论:(0)  加入收藏
存在任何解决实际人类问题的业务。它可能是提高速度,降低成本,提高便利性,增加生活乐趣或使知识触手可及。通常用于解决这些业务问题的技术。但是,为什么设计模式很重要?IT系统的典型挑战是可用性,可伸缩性,弹性,数据管理,性能...【详细内容】
2021-01-14  Tags: 设计模式  点击:(176)  评论:(0)  加入收藏
1.单例模式作用:保证一个类只有一个实例,并提供一个访问它的全局访问点,使得系统中只有唯一的一个对象实例。应用:常用于管理资源,如日志、线程池实现要点:在类中,要构造一个实例,就...【详细内容】
2020-12-01  Tags: 设计模式  点击:(94)  评论:(0)  加入收藏
提到设计模式,很多人都会觉得老生常谈,有些人觉得设计模式很有必要,有些人觉得设计模式没那么重要,那么我们在工作中是否应该重视设计模式呢?我们是否应该将设计模式大量应用到我...【详细内容】
2020-11-10  Tags: 设计模式  点击:(102)  评论:(0)  加入收藏
大家好,欢迎来到设计模式专题,我们的主旨是介绍一些有趣好玩的设计模式。今天我们介绍的设计模式叫做命令模式(command),在这个模式下,我们可以实现do和undo的解耦,让使用方不用...【详细内容】
2020-10-16  Tags: 设计模式  点击:(111)  评论:(0)  加入收藏
什么是微服务模式随着网络基础设施的高速发展,以及越来越多的个体接入互联网,在考虑构建支持海量请求以及多变业务的软件平台时,微服务架构成为多数人的首选。微服务架构的出现...【详细内容】
2020-09-09  Tags: 设计模式  点击:(95)  评论:(0)  加入收藏
什么是组合模式“组合模式”也被称为“部分整体模式”该模式属于结构型模式的一种。讲解该模式之前先带大家熟悉一下“树形结构”。相信大家对“树形结构”不会太陌生,如果你...【详细内容】
2020-09-08  Tags: 设计模式  点击:(119)  评论:(0)  加入收藏
计算机是为了让人们变轻松而承担现实世界中一部分工作的机器,但现实世界与软件之间存在着很大的沟壑,为了填补这个沟壑,我们需要进行3个阶段的工作,即「业务分析」、「需求定义...【详细内容】
2020-08-20  Tags: 设计模式  点击:(112)  评论:(0)  加入收藏
上次有小伙伴建议,源码分析太枯燥了,要是能够结合设计模式一起来,这样更有助于大家理解 Spring Security 源码,同时还能复习一波设计模式。因此松哥今天就试着整一篇,和大家来聊...【详细内容】
2020-07-31  Tags: 设计模式  点击:(47)  评论:(0)  加入收藏
事件驱动架构是一种分布式的异步架构模式,是解耦复杂系统组件的一种处理手段。这种架构模式主要包含两种实施方式,一种是集中式的,一种是非集中式的。集中式架构 其包含了 even...【详细内容】
2020-06-30  Tags: 设计模式  点击:(72)  评论:(0)  加入收藏
▌简易百科推荐
摘 要 (OF作品展示)OF之前介绍了用python实现数据可视化、数据分析及一些小项目,但基本都是后端的知识。想要做一个好看的可视化大屏,我们还要学一些前端的知识(vue),网上有很多比...【详细内容】
2021-12-27  项目与数据管理    Tags:Vue   点击:(1)  评论:(0)  加入收藏
程序是如何被执行的  程序是如何被执行的?许多开发者可能也没法回答这个问题,大多数人更注重的是如何编写程序,却不会太注意编写好的程序是如何被运行,这并不是一个好...【详细内容】
2021-12-23  IT学习日记    Tags:程序   点击:(9)  评论:(0)  加入收藏
阅读收获✔️1. 了解单点登录实现原理✔️2. 掌握快速使用xxl-sso接入单点登录功能一、早期的多系统登录解决方案 单系统登录解决方案的核心是cookie,cookie携带会话id在浏览器...【详细内容】
2021-12-23  程序yuan    Tags:单点登录(   点击:(8)  评论:(0)  加入收藏
下载Eclipse RCP IDE如果你电脑上还没有安装Eclipse,那么请到这里下载对应版本的软件进行安装。具体的安装步骤就不在这赘述了。创建第一个标准Eclipse RCP应用(总共分为六步)1...【详细内容】
2021-12-22  阿福ChrisYuan    Tags:RCP应用   点击:(7)  评论:(0)  加入收藏
今天想简单聊一聊 Token 的 Value Capture,就是币的价值问题。首先说明啊,这个话题包含的内容非常之光,Token 的经济学设计也可以包含诸多问题,所以几乎不可能把这个问题说的清...【详细内容】
2021-12-21  唐少华TSH    Tags:Token   点击:(9)  评论:(0)  加入收藏
实现效果:假如有10条数据,分组展示,默认在当前页面展示4个,点击换一批,从第5个开始继续展示,到最后一组,再重新返回到第一组 data() { return { qList: [], //处理后...【详细内容】
2021-12-17  Mason程    Tags:VUE   点击:(14)  评论:(0)  加入收藏
什么是性能调优?(what) 为什么需要性能调优?(why) 什么时候需要性能调优?(when) 什么地方需要性能调优?(where) 什么时候来进行性能调优?(who) 怎么样进行性能调优?(How) 硬件配...【详细内容】
2021-12-16  软件测试小p    Tags:性能调优   点击:(19)  评论:(0)  加入收藏
Tasker 是一款适用于 Android 设备的高级自动化应用,它可以通过脚本让重复性的操作自动运行,提高效率。 不知道从哪里听说的抖音 app 会导致 OLED 屏幕烧屏。于是就现学现卖,自...【详细内容】
2021-12-15  ITBang    Tags:抖音防烧屏   点击:(23)  评论:(0)  加入收藏
11 月 23 日,Rust Moderation Team(审核团队)在 GitHub 上发布了辞职公告,即刻生效。根据公告,审核团队集体辞职是为了抗议 Rust 核心团队(Core team)在执行社区行为准则和标准上...【详细内容】
2021-12-15  InfoQ    Tags:Rust   点击:(24)  评论:(0)  加入收藏
一个项目的大部分API,测试用例在参数和参数值等信息会有很多相似的地方。我们可以复制API,复制用例来快速生成,然后做细微调整既可以满足我们的测试需求1.复制API:在菜单发布单...【详细内容】
2021-12-14  AutoMeter    Tags:AutoMeter   点击:(20)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条