如何让你的代码高效、优雅、可重用?除了不断迭代之外,学习设计模式是最好的捷径。
在工作中,你可能经常会发现很多人把大学里学到的Java设计模式、高等数学、编译原理当成脱离实际工作的知识。
但无论是面试还是实际工作,你是否经常听到资深专家给你“洗脑”,说设计模式很重要?你可能为此购买了书籍或参加过培训,但往往是因为应用效果不佳。从一开始你就非常重视,后来逐渐习惯性的忽视了。最终,它在你心中的重要性可能不如明天那么重要。需要异花受精。
相信我,你并不孤单。
过去很长一段时间,我和大家一样,内心反复挣扎,在学与不学的矛盾中徘徊,时不时还存在以下困惑:
工作多年后回过头来看,发现当时的困惑的关键并不是设计模式太抽象或者难以应用,而是我可能没有从设计模式的范围和背景来理解。开头:设计模式解决了什么问题?为什么要抽象这样的场景呢?如何解决这些问题呢?
关于设计模式的常见误解
正是因为我们不了解这些应用的范围和背景,所以很多时候我们总是“抄袭”设计模式,以为自己在应用设计模式,殊不知我们之前一直在误解设计模式我们甚至开始了,而且我们是无法控制的随机性。最终带来了很多不必要的麻烦。
因此,想要学好设计模式,就必须破除这些误区。
误区一:经典模式太抽象,难学
说起设计模式,你的第一反应会不会想到“四人帮”GoF的那本“经典”书籍《设计模式:可复用面向对象软件的基础》?或者想想那 23 种“经典”模式?
确实,设计模式太经典了,但经典也带来了一个问题:太抽象,难以快速理解。而对于没有太多闲暇时间的你来说,阅读抽象经典更是难上加难。
例如,下面是《设计模式》一书中对访问者模式的使用场景的描述:
一个对象结构包含许多具有不同接口的类对象,并且您希望对这些对象执行一些依赖于其特定类的操作。
需要对对象结构中的对象执行许多不同且不相关的操作,并且您希望避免这些操作“污染”对象的类。这允许您集中相关操作并在类中定义它们。当对象结构被许多应用程序共享时,使用模式允许每个应用程序仅包含它需要的操作。
定义对象结构的类很少改变,但经常需要在此结构上定义新的操作。更改对象结构类需要为所有访问者重新定义接口,这可能成本高昂。如果您的对象结构类经常更改,那么最好在这些类中定义这些操作。
你会发现,即使读得很仔细,你还是似懂非懂。看起来好像可以结合实际场景,但是到了实际设计编码的时候,你发现无从下手。为什么?
最关键的是,当你面对真实的业务需求时,如何快速选择最合适的设计模式?这个问题仍然没有答案。
其实,经典之所以过于抽象,是因为它所蕴含的知识密度太高,需要时间来破译。比如,在实际业务中,我们其实更关心的是:设计模式如何实现?不同设计模式之间有哪些共性和独特性?有没有真实的代码示例?也就是说,我们首先要弄清楚设计模式能够解决哪些范围的问题,然后才能正确使用设计模式。
其实设计模式最初提出的时候就说过了,就是《设计模式》这本书的副标题:可重用面向对象软件的基础。设计模式解决的是“可重用”的设计问题,而可靠性设计、性能设计、安全设计、可服务性设计等是设计模式无法解决的。
简单来说,设计模式是从不同项目中总结出来的通用经验,帮助我们快速理解现有系统并找到共同规则。如果没有足够的经验或思考,很容易引入错误的设计,造成更多的麻烦。
所以,“经典太抽象”只是一个事实。只要你肯花时间仔细解读,学起来并不难。
误区二:设计模型过于单一,复杂业务场景难以落地。
现在,关于设计模式有两个非常有趣的现象。
其实这个冲突的关键点在于设计模式解决的问题范围不明确。也就是说,设计模式并不是全场景的解决方案,需要考虑其适用范围。
例如,在面向对象语言Java领域,如何最大限度地发挥面向对象语言的继承与结合的威力?如何解耦程序之间的依赖关系?设计模式将提供一些答案。
如果您现在接到一个复杂系统的设计任务,比如如何设计闪购系统?你不仅需要关心业务功能的实现,还需要关心不同开发成员之间的相互配置、服务器资源等,这时候你就想到了设计模式中的适配器模式、策略模式、状态模式... 对你来说帮助并不是那么明显,因为你实际上还没有达到需要如此详细实现的阶段。
事实上,设计模式是为了解决有限领域的有限问题而提出的。比如非业务场景的技术框架如何实现软件的可复用?如何才能提高更多人的编程效率?事实上,在Netty、Java、JDK等广泛认可的工具中,设计模式的应用随处可见,但同时又不仅仅是设计模式本身。
因此,你不能把设计模式当作一种通用的解决方案,或者认为它应该解决超出其范围的问题。必须考虑它的适用范围,否则问题将无法得到有效解决。
误区三:既然模式有用,那么一切都是模式
例如,你可能会说:
以上其实都是“欲望思维”,逻辑上都是错误的。
Java设计模式原本是从不同编程项目中总结出来的通用经验。它们是现有的既定事实,可以解决许多工具、组件和框架的重用问题。比如你经常使用的框架中,从工厂模式、原型模式,到代理模式、门面模式、观察者模式等等,在它们的源码中你随处都可以看到它们的身影。
因此,很多人认为编程时应该处处使用模式,并且使用的模式越多,设计就越好。其实,好的设计从来不在于使用了多少模式,而在于如何合理运用模式的设计思想,如何利用模式来解决实际问题。
例如,当我负责一个网关系统时,我就陷入了“模式综合症”。当时我就一直在思考各种模式如何使用。即使是一个小的过滤规则模块,我也想知道是否可以使用。责任链模型,但实际上这个需求可以通过简单的白名单来解决。最终的结果当然是代码变得更加复杂和难以维护,导致大量的重构和沟通工作。
所以,学习设计模式是为了启发我们的思维,而不是“手里拿着锤子,满世界找钉子”。
如何正确学习设计模式
设计模式真的不好用吗?或者它已经成为过去式了?其实争论的焦点不应该是设计模式本身是否有用,而是我们是否有正确的学习方法和应用设计模式的思维模式。
那么如何让经典真正为我所用呢?有四种非常简单的方法。
首先,我们要端正心态。设计模式不是万能药或灵丹妙药。设计模式能解决的问题其实是有限的。你应该始终保持正常的心态,正确分析设计模式能解决和不能解决的问题。不过,虽然模型解决的问题有限,但它可以激发你的想象力和灵感,获得更多有用的信息来解决更多的问题。总之,放弃争论设计模式的用处,多花点时间去学习和实践,不要总是不加思考就想着使用。
其次,了解设计模式的背景知识。例如,设计模式是如何定义的?设计模式的历史演变和变化?设计模式适用于哪些领域?哪些领域不适用?如何结合实际分析和使用?在学习一门学科时,如果总是忽略相关的背景知识,久而久之就会养成零碎知识积累的习惯——收集的信息很多,但拆解和吸收的却很少。在学习相关知识的时候,你会发现原来的知识会逐渐串联起来,串联起来。这是一个事半功倍的举动。
再次,努力拥有作为主人独立思考的习惯。互联网时代,不缺信息和方法,缺的是能解决复杂问题的高手。大师之所以成为大师,是因为大师不拘泥于某一知识的高低,而是保持

最后,从现在开始,坚持下去。学习技术知识并不比读文学小说好。你需要面对比较枯燥的业务场景,有时还需要做一些你可能不喜欢的重复性工作。但只有坚持,才能成长和发展自己真正的能力。很多时候我们更容易半途而废,但如果你想突破瓶颈、提升能力、升职加薪,如果你不付出努力,你可能无法抓住机会来临时。所以,不要半途而废,要坚持下去。
总结
请记住:设计≠编码,愿望≠事实。
不要看源码很多年,工作做了很多年,还是不能很好地设计和编码。当你知道了很多“如何”时,你还必须更多地思考“为什么”和“什么”。
学习设计模式的关键不在于你掌握了多少设计模式,而在于你是否能够真正灵活地运用它们来解决更复杂的现实问题。例如,在构建API网关时,是否可以借鉴模式或模式?在设计数据分析应用程序时,您能否避免设计模式并专注于数据分析本身?
另外,当你学习设计模式时,不要太关注“无用”,而应该发现更多“有用”的地方,并让这些“有用”的地方滋养你的思维,因为你的目的是解决困难解决现实世界中的问题,而不是争论设计模式是否有用。
就像你无法立即解决生活中的所有问题一样,设计模式也无法解决世界上的所有问题。不过,只要你不断地学习和思考设计模式,设计模式就能给你带来源源不断的新想法。灵感和新的希望。
课后感想
在开始学习23种经典Java设计模式之前,你还知道哪些经典设计模式?欢迎您在留言区与我分享,我会尽快回复您。
下一讲,我将与大家分享Unix哲学给现代编程带来的启发。记得准时来听课哦!
# 海南网站优化电池充电
# 自己的
# 陇西抖音seo关键词排名方式有哪些
# 标准化网站推广怎么推
# 营销推广市场推广策略
# 网站推广服务业
# 南京网站推广公司排名榜
# 潍坊广告网站推广电话
# 迁安专业的seo优化
# 东莞seo机构
# 桥头标准化网站优化
# 结合实际
# 和田品牌网站建设
# 黄陂seo排名收费标准
# 世界杯各大网站的推广
# 临朐网站推广优化
# SEO监控测评衣服
# 服务好的网站建设价格
# 营销号自我推广怎么做的
# 沈阳网站推广唯辛LS15227专业
# 营销推广引流的知识点
# 光明整合网络营销推广
# 是从
# 如何让代码高效优雅可复用
# 学习设计模式是最佳捷径
# 的是
# 当你
# 面向对象
# 都是
# 我就
# 是因为
# 应用程序
# 你还
# 如何让代码高效优雅可复用?学习设计模式是最佳捷径
# 你不
# 带来了
# 你可
# 半途而废
# 你应该
# 你会发现
# 于你
# 很多年
# 如何实现
相关文章:
小区居委会建群便于管理服务,群成员言论不当谁担责? 百丽网站建设银行
信息流广告为什么受广告主喜欢?
广告营销的四大策略及技巧介绍
引流推广赚钱如何实现一劳永逸?
加入广告联盟营销有什么好处?联盟营销有哪些优势?
12种靠谱又收益不错的在家就可以做的网赚兼职平台介绍
建一个企业网站要花多少钱?价格差距大的原因分析 黑帽seo黑酷科技
联盟营销是什么?加入联盟营销有什么好处?
流量变现是什么意思?教你10个流量变现方式!
引流没效果?想要提升引流效果你要掌握这四条核心要素!
微信商家收款要手续费吗?手续费多少及申请有啥要求?
宝妈在家兼职工作有哪些选择?在线教育与自媒体运营了解一下 德宏网络营销与推广招聘
做广告推广的几个要点和细节,一定要记好了!
今日头条的穿山甲和其他几大广告联盟平台有何区别?
轻松月入上万的app推广赚钱项目玩法分享!
社交app如何做推广?目前主流的APP推广渠道分享!
app推广如何实现快速变现赚钱?
怎样做才能够有效的增加网站流量?
抖音店铺转化率影响因素:数量、评价等对销量的作用 上蔡网站推广引流怎么做
QQ群操作红包引流cppa推广赚钱日赚1000+的运营思路和方法分析!
app地推过程中需要注意的一些推广技巧以及常见问题!
利用58,赶集,百姓网等平台操作项目赚钱的流程和思路分享!
6个可以利用手机赚钱兼职做任务的app和平台介绍!
如何利用身边的资源赚钱?这五个最好做,轻松赚钱!
四个非常有效且热门的引流方式,做好了日引流100+非常轻松!
广告联盟推广赚钱之qq好友引流玩法介绍
网站流量变现赚钱三大方法的优缺点分析
微信图片过期或被清理?这些方法帮你找回原图 搜索优化seo
分享两个不一样联盟赚钱玩法,亲测效果非常棒!
想做国外问卷调查赚钱,你的明确这3个问题!
分享三个0成本的网络赚钱项目和操作方法
社交app软件营销的四大套路,你知道吗?
点击率怎么赚钱的?点击广告赚钱的平台都有哪些?
网站营销之seo优化排名的好处以及如何提升转化效果
日常生活中微信成重要沟通工具,如何把录音发送到微信?
月初流量用不停月尾愁?划算流量卡及移动王卡套餐来啦 流量网站推广
百度广告联盟怎么赚钱?百度广告联盟点击一次多少钱?
游戏推广怎么做?这7个游戏推广方法分享给你!
做广告联盟之前要了解的3个准备工作和5个专业名词术语!
美国代理化妆品进口清关全流程,含规定、文件及问题解答 湛江黑帽seo
怎么样才能高效的操作项目赚钱呢?你不妨可以这样做!
眼镜店老板看过来!这些运营问题咋解决?专业管理系统了解下 唱吧推广策划 营销
国内联盟的发展前景如何?面临着哪些问题?
你忙着清理僵尸粉的时候,别人在忙着利用你赚钱!
seo网站关键词优化该怎么做?如何提升网站排名?
2022年app营销怎么做?app营销推广9大策略!
新建的广告联盟平台前期如何快速吸引个人站长关注?
如何用手机赚钱?最容易赚钱的10个手机赚钱项目送给你!
美国代理化妆品进口清关全流程介绍,这些环节不容忽视 数字营销没充值就推广了
广州市举行第七次全国人口普查启动仪式,这些要点需知悉 seo怎么设计网页
相关栏目:
【
广告资讯90366 】
【
广告推广18483 】
【
广告优化154267 】
【
广告营销46464 】