这样学设计模式

导读:如何学好设计模式 什么是设计模式 设计模式(Design Pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。 上面的解释来自于某度某科,是比较标准的定义,可以从中筛选出几个关键字来帮助我们理解什么是设计模式: 最佳实践 解决方案 试验和错误总... 阅读详情

源自:http://blog.youkuaiyun.com/yqj2065/article/details/39103857

    GoF的[设计模式]是经典著作,有人看了好多遍仍然说没有看懂,许多人看懂了一些模式但不知道如何应用……下面抛砖引玉,讨论一下如何学习设计模式。

①学习技巧

学习设计模式时,有一些技巧能够帮助你快速理解设计模式。

a)        使用较简单的面向对象的语言如Java、C#。GoF的[设计模式]实质上是面向对象的设计模式。[GoF·1.1]中提到“程序设计语言的选择非常重要,它将影响人们理解问题的出发点”。从学习设计模式的角度看,Java和C#较C++更容易一些。比如Java接口等,能够更有效展现设计模式的意图。

b)       使用工具BlueJ。BlueJ最大的好处,就是提供了简单的类图。正如我在简明设计模式Java中所做的,较少去专门画类图,而是在BlueJ中截图。在学生上机编写演示程序时,常常先看他的类图,以判断他的程序是否正确,必要时再看源代码。

c)        日常生活的隐喻。用一些实际生活中的例子来说明某某模式,能够让你快速掌握某模式的目的和实现代码的结构。同时,你要认识到,这种隐喻如同告诉你(2+3)2=22+2*2*3+32,你需要自己举一反三,得出(a+b)2=a2+2ab+b2。在实际工作中的模式的具体应用,则相当于应用代数公式。

d)       动手实践和怀疑精神。看显浅的参考书或上网查阅资料时,要自己敲(复制也可以)代码并运行,要多修改别人的源代码提出自己的观点:为什么书中不这样设计、为什么要那样设计;如果增添一些方法、方法参数、或成员变量会如何?必须要自己亲自动手,最起码要运行。另外,要敢于向博主提问、拍砖。你甚至可以质疑GoF的某些章节的解说和意图,更何况一些博主呢。

②基础知识

这些知识让你知道,设计模式好在何处。

a)        面向对象范式。也就是人们传说的思想。封装、继承和多态这些东西,在我看来比if、for等稍微高一点,也属于语法问题。面向对象编程要掌握的三大原则是柏拉图(Plato)原则、里氏(Liskov)替换原则和Parnas原则。这三个原则其实非常简单。任何原则,你觉得很难一见钟情,很难快速认同,那它就不会是好原则。

b)       设计原则。许多人列举了7大原则,如单一职责原则、开闭原则、里氏代换原则、依赖倒转原则、接口隔离原则、合成复用原则、迪米特法则。LSP,我将它提升为面向对象范式的3大基石之一;单一职责和接口隔离,主要作为面向对象分析/OOA时职责划分所遵循的原则,此时你可以不太在意。依赖倒转原则,我把它作为垃圾扔掉,因为开闭原则或者直接地说“依赖于抽象类型原则”已经包含了依赖倒转原则的精华,而依赖倒转原则的糟粕由IoC继承。当然,回调,我很强调。所以,你要掌握的有抽象依赖原则(OCP)、单向依赖原则(含对回调的学习)和最低依赖原则(合成复用原则、迪米特法则)。

c)        UML的初步了解。这是学习设计模式的工具。在早期,你甚至可以仅了解BlueJ的相关图示,也就10分钟的事情。

③境界

《五灯会元》卷十七中,有一则唐朝禅师青原惟信禅师的语录:“老僧三十年前未参禅时,见山是山,见水是水。及至后来亲见知识,有个入处,见山不是山,见水不是水。而今得个休歇处,依前见山只是山,见水只是水。”

a)        仔细研究GoF的[设计模式],逐个学习其意图和结构,是一个抱着字典学习英语的方式。见山是山,见水是水,导致你可能在实际工作中生搬硬套、东施效颦。

b)       建议从简单的场景出发,自己发现或设计出某种模式。你从中体会该模式是如何解决问题的,这样,该模式成为你自己的东西,你才不会出现知易行难的问题。所有的设计模式不过是基本原则和理念在特定场合的应用。你可能不知道某个设计模式的名字,但是你知道它一切的优缺点和变体以及应用场合。见山不是山,见水不是水。

c)        你对基本原则和理念融会贯通,你可以惋惜:“我找到一种模式,原来在[设计模式](其实是某个特殊的书、文章提到的模式)中早就有了这种模式”。这时,模式不模式又如何呢?反模式又怎样。看见一个模式,你会说:“嗯,这是一种有用的模式”。见山只是山,见水只是水。


design-samples:《设计模式就该这样学,基于经典框架源码和真实业务场景》随书代码示例工程 《设计模式就该这样学,基于经典框架源码和真实业务场景》 已全面开启预售! ! ! 京东购买链接: 当当购买链接: Design Patterns: Elements of Reusable Object-Oriented Software(以下简称《设计模式》),一书由Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides合着(Addison-Wesley,1995)。这四位作者常被称为“四人组(Gang of Four)”,而这本书也就被称为“四人组(或GoF)”书。他们首次给我们总结出一套软件开发可以反复使用的经验,帮助我们提高代码的可重用性、系统的可维护性等,解决软件开发中的复杂问题。 设计模式已诞生20多年,其间相继出版的关于设计模式的经典著作不计其数。如果说GoF的《设计模式》是设计模式领域的“圣经”,那么之后出版的各种关于 立即下载

相关推荐

高清晰完整版设计模式,模式学习的经典书籍

高清晰完整版设计模式,模式学习的经典书籍。 PDF格式,通过通俗易懂的方式教你学习模式 本资源有两个压缩包,需要全部下载才能解开

《设计模式就该这样学》之实战案例,让抽象工厂不再抽象

本文节选自《设计模式就该这样学》 1 关于产品等级结构和产品族 在讲解抽象工厂之前,我们要了解两个概念:产品等级结构和产品族,如下图所示。 上图中有正方形、圆形和菱形3种图形,相同颜色、相同深浅的代表同一个产品族,相同形状的代表同一个产品等级结构。同样可以从生活中来举例,比如,美的电器生产多种家用电器,那么上图中,颜色最深的正方形就代表美的洗衣机,颜色最深的圆形代表美的空调,颜色最深的菱形代表美的热水器,颜色最深的一排都属于美的品牌,都属于美的电器这个产品族。再看最右侧的菱形,颜色最深的被指定.

Java大将军的博客 551

1.47寸ST7789V3彩屏硬件设计与驱动调试指南

TFT LCD是一种基于薄膜晶体管阵列控制像素明暗的主动式显示技术,其核心依赖于专用驱动IC(如ST7789V3)完成时序生成、GRAM管理与伽马校正。该类小尺寸彩色显示屏广泛应用于嵌入式HMI、IoT终端与可穿戴设备,具备高PPI、低功耗和SPI接口易集成等工程优势。理解RGB565数据格式、SPI Mode 0通信时序及关键寄存器(如0x36方向控制、0x3A像素格式、0x2A/0x2B地址窗口)是实现稳定显示的基础;而正确处理电源设计(严禁5V直供)、复位时序与背光PWM调光,则直接决定系统可靠性与能

weixin_30995917的博客 165

《设计模式就该这样学》之彻底搞懂访问者模式的静态、动态和伪动态分派

本文节选自《设计模式就该这样学》 1 使用访问者模式实现KPI考核的场景 每到年底,管理层就要开始评定员工一年的工作绩效,员工分为工程师和经理;管理层有CEO和CTO。那么CTO关注工程师的代码量、经理的新产品数量;CEO关注工程师的KPI、经理的KPI及新产品数量。由于CEO和CTO对于不同的员工的关注点是不一样的,这就需要对不同的员工类型进行不同的处理。此时,访问者模式可以派上用场了,来看代码。 //员工基类 public abstract class Employee { pub.

Java大将军的博客 620

私有云平台搭建——OpenStack

私有云平台搭建——OpenStack 搭建过程

2301_79739036的博客 3088

VXLAN技术详解

VXLAN(虚拟可扩展局域网)是一种Overlay二层虚拟化技术,通过MAC-in-UDP封装在IP网络上构建大规模虚拟二层网络。核心组件包括VTEP(隧道端点)、24位VNI(支持1600万个虚拟网络)和VXLAN网关。相比VLAN,VXLAN具有超大规模扩展、跨三层互联、支持虚拟机无缝迁移等优势,适用于云数据中心多租户隔离、跨数据中心互联等场景。其基于IP路由的封装方式无需改造物理网络,为现代云网络提供了弹性、安全的虚拟化解决方案。

kjkdd的博客 594

《设计模式就该这样学》之这个无敌设计,可以解析并运算任意数学表达式

本文节选自《设计模式就该这样学》 1 使用解释器模式解析数学表达式 下面用解释器模式来实现一个数学表达式计算器,包含加、减、乘、除运算。首先定义抽象表达式角色IArithmeticInterpreter接口。 public interface IArithmeticInterpreter { int interpret(); } 创建终结表达式角色Interpreter抽象类。 public abstract class Interpreter implements IArith.

Java大将军的博客 635

树莓派5新手必看:保姆级ibus中文输入法安装与配置全流程(含.bashrc设置避坑)

本文详细介绍了在树莓派5上安装和配置ibus中文输入法的完整流程,包括系统环境准备、ibus框架安装、图形界面配置及常见问题解决方案。通过清晰的步骤说明和避坑指南,帮助新手快速实现中文输入功能,提升开发效率。

weixin_29159441的博客 524

设计模式要不要学,该怎么学

大家有没有思考过如下几个问题?同样都是写代码,为什么有些同学的思路清晰、代码整洁;而我的代码却充满了重复和混乱,每次要修改时都无从下手、Bug 一堆?如何写代码,才能使得项目易于扩展和维护?我每天都在写重复的代码,如何提升水平?为什么我读不懂大佬写的源码?是不是缺少了什么知识?如果存在上述问题,那么我们一定要学习软件开发中的重要技能 —— 设计模式。设计模式是软件开发人员在软件开发过程中面临的一般问题的通用解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。

m0_56653160的博客 1165

Matlab实战:3种雷达间歇采样干扰的仿真与识别(附完整代码)

本文通过Matlab实战,详细仿真了雷达有源间歇采样干扰的三种核心样式:直接转发、重复转发和循环转发干扰。文章提供了完整的代码实现,并深入探讨了基于时频分析和循环平稳分析的特征提取与识别方法,为雷达抗干扰技术的学习与实践提供了清晰的工程实现路径。

weixin_29053695的博客 364

【高清照片】深圳光博会看PCIe Over Fibre 实现方案

本文分析了PCIe over Fibre技术及其在数据中心的应用前景。该技术通过光纤延伸PCIe总线,解决了传统铜缆距离限制问题,支持跨机架资源池化。目前主要有两种实现方式:CDFP混合光缆方案和Retimer转接卡方案,各有优缺点。文章还探讨了CDFP接口的现状、低速信号传输解决方案,以及PCIe速率与光通信发展的对应关系。最后对比了PCIe光缆与以太网光缆的关键差异,指出PCIe光互连在协议透明度和边带信号处理上的特殊要求。随着标准推进,PCIe over Fibre将成为数据中心扩展高带宽、低时延互连

Saniffer的博客 1383

设计模式应该这样学

以下文章来源于公众号“程序员求职之路” 设计模式是人们在面对同类型软件工程设计问题所总结出的一些有用的经验。模式不是代码,而是某类问题的通用设计解决方案。这篇文章以面试问答的角度带你了解设计模式这块知识。 1、请列举出在 JDK 中几个常用的设计模式? ①单例模式(Singleton pattern)用于 Runtime,Calendar 和其他的一些类中; ②工厂模式(Factory pattern)被用于各种不可变的类如Boolean,像Boolean.valueOf; ③观察者模式(Observer.

Youz_的博客 255

024、反激变换器的短路保护设计

本文详细探讨了反激变换器短路保护的设计要点与实践经验。作者通过实际案例分析了短路时反激拓扑的电流特性,指出初级峰值电流限制是最基础的保护手段,但需配合打嗝模式使用。文章重点剖析了打嗝模式设计的三个关键陷阱:频率设定、退出条件和软启动衔接。同时强调次级侧辅助保护、变压器参数优化、环路响应协调的重要性,并比较了自恢复与锁死方案的适用场景。最后提出实测验证的四个关键点和设计经验:不盲信芯片手册、保护电路独立设计、充分留有余量、进行破坏性测试。全文以工程实践为导向,为反激电源的可靠短路保护提供了系统性解决方案。

Jack010169的博客 237

设计模式就该这么学:为什么要学设计模式?(开篇漫谈)

引子:想象一下一个厨师,不学菜名如何跟人快速的交流。回锅肉,鱼香肉丝,龙井虾仁,狮子头,叫花鸡。请你换一种方式来介绍试试看。   设计模式也是,作为程序员之间的共同语言有必要学习下,别人讲个模式,而你并不懂,尴尬不,沟通成本也变高,当然更为重要的原因是,这是前辈们这么多年摸滚打爬总结总结出来有效经验总结,重要性自然不必多说,在我看来,学习设计模式的必要性就跟1+1=2一样明显。   笔...

weixin_30311605的博客 634

AI测试实战:手把手教你做LLM(大模型)性能测试「含完整代码」

大模型API性能测试是评估模型服务响应能力、吞吐量和资源效率的关键手段。核心指标包括总响应时间、吐字率、首token延迟、输入/输出tokens数量、QPM等。测试流程涵盖构造负载、并发请求、数据采集和指标计算。优化建议针对吐字率低、首token延迟高、QPM偏低等问题,从模型、硬件、系统等多层面提出解决方案。

blues_C的博客 1429

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

设计模式就该这么学

https://blog.youkuaiyun.com/weixin_30596165/article/details/98309139?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522160506151419725255533581%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=160506151419725255533581&biz_i

studyvcmfc的专栏 566

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

设计模式.怎么学设计模式 原则

定义 在某些场景下,针对某类问题的某种通用的解决方案 设计模式 区别于架构模式和惯例 -架构模式 是软件的架构风格,架构维度 -设计模式 是软件设计中的问题的通用解决方案,设计维度 -惯例 是 特定语言中 代码的使用技巧,编码维度 原则 开闭原则 对扩展开放,对修改关闭单一职责原则 一事一地里氏替换原则 子类可以替代父类 重写会破坏这个...

记录 分享 成就 271

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

为啥要学设计模式

我们使用设计模式是为了什么,是为了满足易维护、易扩展、高内聚、低耦合以及程序设计六个原则 开闭原则 单一职责原则 里氏替换原则 依赖倒置原则 依赖倒置原则 接口隔离原则 迪米特原则 待续...

学习使用 269

为什么要学设计模式?非学不可吗?

所有言语从一个故事开始,而故事从一份人物简历开始。 人物姓名:王小二 出生年月:不详 年纪:十七八亦或者二十来岁 性格:热血、冲动、抱负远大 梦想:渴望成为一枚武林高手,最好习得一身绝世神功,从此可以独步江湖,笑傲红尘,金钱满库,美女满怀 现实:只是个会使点蛮力,在街头打架斗殴的屌丝。 “我爱上了一个不该爱的人,我的心中都是悔恨。只要想想

黑夜童话的博客 2770

千万不要学设计模式

一、设计模式有用吗? 我觉得除了方便与他人交流,包括写的代码别人方便阅读或者阅读别人的代码外,其它基本没什么特别用处了。 因为如果你比较菜,而且理解能力一般,经验也浅,你强制学习和使用设计模式,容易误入歧途,生搬硬套,只适合研究和学习一下,能够明白最好,不明白就算了,还不如老实从面向对象分析设计以及UML等基础的东西学起。 但如果你从面向对象以及UML研究起,能够老实研究完一本这样的书,最好...

无相 4100

设计模式怎么学

         如果你是一个缺乏项目经验的人,手捧一本关于《设计模式》的书,一定会有一种云里雾里的感觉,你无论耗用多长时间,也未必真正领会;如果你是一个项目经验丰富的人,那么即使没学过设计模式,也会知道在什么场合代码应该怎么写,写出来的代码不知不觉符合某种模式的要求。       觉得设计模式是在实际的项目经验中应用后领会出来的,而非天天捧着书本学出来的。那么其实学习它只需花费几小时的时间,...

你的时间在哪里,你的成就就在哪里 174

为什么要学设计模式?

01什么是设计模式设计模式( Design Pattern )代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一...

形势所逼,不进则退 641

一起学设计模式 - 一起开始设计模式的修炼之路

文章目录一起学设计模式 - 一起开始设计模式的修炼之路1.为什么要学设计模式2.设计模式的六大原则2.1 单一职责原则(Single responsibility principle)2.2 开闭原则(Open Close Principle)2.3 里氏替换原则LSP(Liskov Substitution Principle)2.4 依赖倒转原则(Dependence Inversion Principle)2.5 接口隔离原则(Interface Segregation Principle)2.6 迪

了无牵挂者忘生,心有所爱者忘死 429

设计模式,你学废了吗?

要开始学习设计模式了????

m0_46156900的博客 487

开篇:为什么要学设计模式

为什么要学设计模式?为了自己写好代码;为了看懂别人的代码。

zherop的博客 638
上一篇: 《Servlet学习笔记》Servlet 简介
下一篇: linux的hostname修改详解
架构师的清醒
博客等级 码龄14年 291粉丝 397原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值