如何学习与正确运用设计模式!

设计模式:可复用面向对象软件的基础 意图提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。别名Kit动机 略适用性在以下情况下可以使用Abstract Factory模式一个系统要独立于它的产品的创建、组合和表示时。一个系统要由多个产品系列中的一个来配置时。当你要强调一系列相关的产品对象的设计以便进行联合使用时。当你提供一个产品类库,而只想显示它们的接口而不是实现时。结构。 阅读详情
无论是前端,还是后端,设计模式都很重要。

一、什么是设计模式

设计模式就是为了解决过去项目中经常遇到的问题而提炼出来的解决问题的方案。如果你还是很那理解的话,你可以去网上查一下资料,多查几个答案,从不同角度去理解。

 

二、有哪些常用的设计模式

建议找一本书静下心来好好看看,比如 Head First 设计模式,一定要看完,最好看两遍,因为每次看你都会有不同的理解,不用去记设计模式,去理解就好了。

 

三、设计模式的核心:可扩展性

设计模式的核心是让代码具有可扩展性。可扩展性又可以分为

  1. 自己扩展自己

  2. 第三方扩展。

扩展性的根基:可读性

我们要让代码具有可读性,没有可读性的代码,太可怕了,万恶之源。代码是最好的文档,没有可读性的代码,可扩展性无从谈起。可读性包括代码排版、变量命名规范、代码结构和恰当的设计模式的运用。为什么大家这么讨厌别人的遗留下来的项目,十之八九是可读性太差,扩展性没有,改一处而动全身。有时候我们经常要在性能和可读性上做抉择,请尽可能选择可读性。性能上差别一般情况不会太大,特别是前端。

对框架而言,需要同时考虑自己扩展自己和第三方扩展。而对于普通项目来说,更多的是考虑自己扩展自己。不管谁扩展谁,关键是如何运用设计模式。

 

四、如何运用设计模式

换而言之,如何运用设计模式让自己的代码具有可扩展性。

你在看一些开源框架的时候,发现框架里面到处都是设计模式,还有很多变种,当你没有把设计模式融汇贯通的时候,你会觉得这些大牛确实牛逼,但是老是把一些很简单的功能写得很绕。如果你也有这种想法,要么大牛水平不行,要么你就根本没有理解大牛意图。

 

恰到好处的运用设计模式

代码有了可读性以后,我们就可以进一步升华我们的代码:恰到好处的运用设计模式。为什么要强调恰到好处呢?我见过很多人过度设计的代码,包括我自己,时间花了不少,最后发现这个设计从来没有用上,反而让代码变得匪夷所思。如何判断自己有没有过度设计呢,这是一个非常复杂的自我博弈过程,需要丰富的经验,给大家一个模糊的判断方法:比较犹豫要不要在此处使用某个设计模式的时候,那就选择不要。因为过度设计很可怕,比不设计还糟糕。

 

运用设计模式,首先你需要了解什么是设计模式,有哪些常用的设计模式;然后在去看开源框架、造轮子,去真正理解大牛们是如何运用设计模式的,以及为什么要在这里运用这个设计模式;最后你将设计模式运用到你自己的代码里。开始可能会有点生硬,慢慢会变得越来越自然,此时,你已经将设计模式融会贯通了,因为你学会了将设计模式在真实场景下如何做少量调整,而早期可能只会死搬硬套。

 

看开源框架、造轮子

 

看开源框架,刚开始比较痛苦,发现好多地方看不懂,比如我早期看 Spring 的源码的时候,就有很多地方不太理解,比较有挫败感,不过,这都是很正常的,因为开源项目往往比较复杂,而且可能还有一些历史包袱的存在。看懂多少算多少,不必强求,下次在使用这个功能的时候,反复看看,每次看,你都会有更进一步的理解。到最后发现你几乎能全部看懂。看开源项目的速度变快,因为每当你看到某处使用到了某个设计模式的时候,自然而然推测出这个功能是怎么实现的了,以及这样实现会带来什么好处。

 

看懂源代码,甚至发现框架的设计还不是最好的,或者在你的场景下不是最好的,这个时候,可以尝试去造轮子,造轮子的过程是吸收别人优秀的设计,去掉别人不足的地方,再有点自己的创新那就更好了。

 

五、在普通项目中使用设计模式

除非特别简单的小项目,不然肯定很多地方都可以用到设计模式,你曾经有没有感觉到自己的代码能力上去呢?其实,是你在不知不觉中领悟到了一些设计模式,只是你不知道这也是设计模式。设计模式无处不在,当你发现某一个功能使用这个方式比较好的时候,”这个方式“就是设计模式,你以后遇到同类型问题,就会不假思索的使用这个设计模式。这也是为什么老手写代码比新手要快的原因,新手需要思考、选择不同设计模式来适合场景。当你感觉对自己发现的设计模式没底的时候,就需要系统的学习设计模式了,看大量的开源项目,向大牛学习他们是如何运用设计模式的,然后在自己的项目中融会贯通。

 

六、写在最后

设计模式无处不在,在实际的项目当中,设计模式不能死搬硬套,适当变通,才是使用设计模式的关键,也是难点。框架使用设计模式让框架更具扩展性,而设计模式也能帮助框架使用者更好地理解框架作者的意图。

 

学习设计模式很像王国维讨论治学时的三重境界:

第一重境界:独上高楼,望尽天涯路。

第二重境界:为伊消得人憔悴,衣带渐宽终不悔。

第三重境界:众里寻他千百度,蓦然回首,那人却在,灯火阑珊处。

 

设计模式书籍我的推荐列表如下:

入门(《Head First设计模式》/《设计模式》(刘伟)+《设计模式实训教程》(刘伟))

→进阶(《研磨设计模式》/《设计模式之禅》)

→应用(《设计模式:基于C#的工程化实现及扩展》)

→理论提高(GOF《设计模式》)

最后

学习不要走马观花的学,每个知识重点大纲,就是学习路线都是根据每一天市场上多数公司用到的新技术整理,在学习的时候还需要结合练习题来做这里的话我也将我之前在学习过程中用到的一些学习资料整理成了文档,以及我自身之前的一个面试文案和知识点补充,有需要的朋友可以加我的QQ群697888503,这里也希望大家最终都能够学有所成,学习编程不是一天两天的功夫,勤能补拙才是硬道理,祝大家最终都能成为一名合适开发攻城狮。 

 

好书系列之-设计模式:可复用面向对象软件的基础 1 第1章引言设计面向对象软件比较困难,而设计可复用的面向对象软件就更加困难。你必须找到相关的对象,以适当的粒度将它们归类,再定义类的接口和继承层次,建立对象之间的基本关系。你的设计应该对手头的问题有针对性,同时对将来的问题和需求也要有足够的通用性。你也希望避免重复设计或尽可能少做重复设计。有经验的面向对象设计者会告诉你,要一下子就得到复用性和灵活性好的设计,即使不是不可能的至少也是非常困难的。一个设 阅读详情

相关推荐

DesignPattern 设计模式学习笔记(面试和工作必备)

最近有很多粉丝留言:“学设计模式有什么用啊,好像我工作中都用不到设计模式,但每次面试都要问实际项目中使用了哪些设计模式,我都答不上来。” 面对这样的问题,我想说设计模式真的很重要。曾经我也认为学设计模式没什么用,但用过了都说好。所以,猿人花了一个星期的时间给大家整理了最常用的设计模式,通过源码和文档的形式分享给大家。 希望大家认真学习掌握,真正学以致用。不仅面试时要对答如流,实际工作中也要加以应用,这样能力才会得到提升。 一、设计模式介绍 设计模式(Design pattern)代表了最佳的实践,通常被有经

猿码天地 593

24种设计模式

24种设计模式 文章目录设计原则单例模式工厂模式策略模式门面模式调停者模式责任链模式装饰者模式观察者模式组合模式享元模式静态代理动态代理迭代器模式访问者模式构建者模式适配器模式桥接模式命令模式原型模式模板方法状态模式谈到的一些问题 设计原则 返回目录 单一职责原则 一个类别太大,负责单一的职责 高内聚,低耦合 里氏替换原则 所有使用父类的地方,必须能够透明的使用子类。比如子类重写父类的A()方法之后,又重载了很多的A()方法,那么这样子会照成对父类接口方法的歧义 例:List list = n.

干嘛卷来卷去的博客 820

设计模式:可复用面向对象软件的基础(非扫描版+高清)

所有资源都是经过实地查看,并会时不时使用的,基本都会带书签,没书签的我也会自己挨着加上书签。 尽量保证一般可搜到的清晰度最好的。 资源包括linux、c++、qt、嵌入式、web等。

设计模式 可复用面向对象软件的基础_谈谈面向对象

何为面向对象编程面向对象编程简介面向对象编程(Object-oriented Programming,缩写:OOP)是软件工程中一种具有对象概念的编程范式(Programming Paradigm),同时也是一种程序开发的抽象方针,与之对应的编程范式还有:函数式编程(Functional Programming)、过程式编程(Procedural Programming)、响应式编程(Reacti...

weixin_39775896的博客 416

WSL2+Docker+Ollama:解锁Windows本地GPU加速运行DeepSeek-R1模型

本文详细介绍了在Windows系统上,通过WSL2、Docker和Ollama的组合方案,实现本地GPU加速运行DeepSeek-R1模型的全过程。该方案解决了Windows环境下Ollama默认无法调用NVIDIA显卡的痛点,通过配置Docker的GPU支持,强制将计算任务分配给GPU,从而显著提升文本生成速度与效率,为开发者提供了一个便捷的本地AI测试环境。

weixin_28452161的博客 357

DeepLearning tutorial(7)深度学习框架Keras的使用-进阶

上一篇文章总结了Keras的基本使用方法,相信用过的同学都会觉得不可思议,太简洁了。十多天前,我在github上发现这个框架的时候,关注Keras的人还比较少,这两天无论是github还是微薄,都看到越来越多的人关注和使用Keras。所以这篇文章就简单地再介绍一下Keras的使用,方便各位入门。主要包括以下三个内容: 训练CNN并保存训练好的模型。 将CNN用于特征提取,用提取出来的特征训练SVM。

wepon的专栏 2万+

设计模式:可复用面向对象软件的基础_设计模式系列 面向对象基础知识

拉勾IT课小编为大家分解1、抽象:一种思维方式,把具体事物的简单化,概括性描述。2、UML:通用建模语言1、对象和类1.1对象在面向对象的世界里,万物皆是对象,动物是对象,植物是对象,对象的本质是什么呢?对象是一个真实存在的事物。比如一个杯子,一碗水都是对象。用对象的方式描述事物,与面向过程方式来讲,更容易理解,更符合人们的思维习惯。1.2类类是对象的抽象,比如一只小狗,一只小猫,他们的抽象是动物...

weixin_36272649的博客 1076

全能扫描王的实现(python版本)- 目标检测图像矫正

全能扫描王python代码实现,可用于文件扫描或者是图像校正

搬砖猛女的啃书历程 5490

Spring 中运用的 9 种设计模式,一定要非常熟练!

长按识别下方二维码,即可"关注"公众号每天早晨,干货准时奉上!本文作者:iCoding91 链接:blog.youkuaiyun.com/caoxiaohong1005spri...

Java学习之道 3020

MIPI转LVDS芯片调试实战:从Kernel到UEFI的完整点亮流程

本文详细解析了MIPI转LVDS芯片调试的全流程,从Kernel驱动开发到UEFI早期初始化,涵盖I2C通信、电源时序控制等核心挑战。通过LT9211芯片实战案例,提供设备树配置、电源时序优化及显示异常排查等实用技巧,助力工程师高效完成屏幕调试工作。

weixin_30314813的博客 450

传感器模块的电路艺术:从引脚定义到系统集成的设计哲学

本文深入探讨传感器模块的电路设计艺术,从引脚定义到系统集成的完整设计哲学。重点解析电源管理、信号处理及I2C通信协议等核心电路原理,分享多模块协同中的电源架构、信号完整性和接地策略,为硬件工程师提供实用的系统级设计思维与实战案例。

o1p2q3r的博客 223

推荐开源项目:DesignPattern —— 翻越编程丛林的设计模式指南

推荐开源项目:DesignPattern —— 翻越编程丛林的设计模式指南 在编程的世界里,设计模式就像是一座座灯塔,引导开发者们在复杂系统中找到最佳实践和解决方案。今天,我们向您隆重推荐一个开源项目——DesignPattern,它是由FengJungle发起并维护的一系列关于设计模式的讲解与实现。这个项目不仅提供了详尽的理论知识,还辅以实际代码示例,帮助开发者从实践中理解并掌握设计模式。 项目...

gitblog_00021的博客 438

航空电子系统标准全景图:ARP4754A、ARP4761、DO-178C、DO-254 的协同作用

通过 ARP4754A、ARP4761、DO-178C 和 DO-254 的相互配合,确保航空电子系统的安全性和功能性在开发过程中得到充分保障。每一个文件在不同层面发挥作用,共同构成了一个完整的、系统的开发和验证框架,确保航空电子设备达到适航要求。这些标准不仅帮助开发人员有条理地开发复杂的航空系统,还确保所有系统组件(软件和硬件)在整个生命周期内都能满足最严格的安全和可靠性要求。

qq_41854911的博客 1812

探索设计模式的艺术:JackChan1999的DesignPattern项目

探索设计模式的艺术:JackChan1999的DesignPattern项目 在编程的世界中,设计模式是解决问题的利器,是经验与智慧的结晶。今天我们要介绍的开源项目【DesignPattern】,是由开发者JackChan1999精心编写的,旨在帮助程序员理解和应用各种设计模式。 项目简介 这个项目是一个全面的设计模式参考库,包含了GOF的23种经典设计模式,以及一些现代编程中的新型模式。每一种模...

gitblog_00018的博客 494

【XCharts插件】3-1、制作图表及代码生成图表(v1.0)

XCharts插件是一款基于UGUI的功能强大、易用、参数可配置的数据可视化图表插件。【Unity3D插件】XCharts插件完全教程《全网最全》-专栏文章目录OK,这是v1.0版本的XCharts插件的创建图表,代码生成图表的教程。可能有人要问了,既然都更新到v3.0了,还写啥v1.0教程呢。因为有些项目就是用v1.0去制作图表了,也没有太多的精力去更新插件,所以就一直用的v1.0,而且v1.0已经能实现大部分的图标样式了,所以,博主还是单独写了一篇文章来介绍v1.0的功能。

优快云博客专家,Unity3D高级软件工程师,《Unity 3D从入门到实战》作者。 1293

获取抖音中x-secsdk-csrf-token的方法

获取抖音中x-secsdk-csrf-token的方法

sh_moranliunian的博客 2020

白话设计模式之吃透设计模式的学习秘籍

大家好呀!在软件开发这个充满挑战与机遇的领域,设计模式就像是一座宝库,里面藏着无数提升代码质量和开发效率的宝藏。我在学习和应用设计模式的过程中,踩过不少坑,也收获了很多宝贵经验。今天就想和大家一起分享这些心得,咱们共同学习,一起进步!

wj_rdk的博客 1847

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

设计模式的运用

设计模式的运用 前面三篇文章对23个GOF设计模式作了简单介绍,并且对设计模式的思想做了初步的探究。接下来的这篇文章作为整个设计模式之旅的最后一篇,讲讲在实际设计或者开发中怎么运用设计模式及其思想。 学设计模式的目的是为了用,但是应该怎么用?这是一个问题,还是一个大问题!难道是拿着23个设计模式一个个比对,看哪一个更贴切?如果是这样,我想,设计模式不学也罢。况且,如果遇到23个设计模式都不适合

lijiang_84的专栏 712

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

9种设计模式在Spring中的运用,一定要非常熟练!

点击上方“Java知音”,选择“置顶公众号”技术文章第一时间送达!作者:iCoding91https://blog.youkuaiyun.com/caoxiaohong1005Spring中涉及的设...

Java知音 706

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

如何正确的使用设计模式?

设计模式是什么? 要想知道设计哦是是怎样解决问题的,首先我们应该知道什么是设计模式?那么这里就先说一下设计模式的概念。 设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。设计模式分为三种类型,分别是:创建型模式、结构型模式,行为型模式。 基本的设计模

m0_45177725的博客 1157

13.DesignPattern设计模式(by-朝夕)

DesignPattern前言1. DesignPattern? 前言 DesignPattern 1. DesignPattern?

王永安的博客 809

必须掌握!你知道 Spring 中运用的 9 种设计模式吗 ?

Spring中涉及的设计模式总结,在面试中也会经常问道 Spring 中设计模式的问题。本文以实现方式、实质、实现原理的结构简单介绍 Sping 中应用...

公众号:Java后端 300
上一篇: Java的学习路线是什么?又该如何高效学习?
下一篇: 30 张Java 的思维导图,全面梳理构建 Java 的知识体系
又是一个特殊的一天
博客等级 码龄7年 287粉丝 0原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值