设计模式-前言

Java设计模式-前言 Java设计模式 阅读详情

什么是设计模式?


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

设计模式的重要性


  1. 设计模式解决的是在软件过程中如何来实现具体的软件功能。实现同一个功能的方法有很多,哪个设计容易扩展,容易复用,松耦合,可维护?设计模式指导我们找到最优方案。
  2. 设计中往往会存在设计缺陷,这些缺陷包括:

    • 僵化性:难以对软件进行改动,即使在功能上来看是很小的改动
    • 脆弱性:在进行很小的改动时,可能导致很多地方出现问题
    • 顽固性:要把系统中某些通用的功能分离出来的努力和风险非常巨大
    • 粘滞性:当面临改动时,改动的方案有很多,一些会保持设计,一些会破坏设计,当采用保持设计的方法比用破坏设计的方法更难应付变化时,说明原设计具有较高的粘滞性
    • 晦涩性:模块难以理解
    • 不必要的重复:代码不能复用,往往通过Copy-Paste来实现相似功能
    • 不必要的复杂性:设计中包含了没有用的成分,往往是过度设计导致的

如果你觉得在开发过程中发现以上问题(缺陷),那么就需要使用设计模式来改善最初设计,即重构原有的设计。如果你是最初的设计者,那么也需要应用设计模式来找到一个最优方案。设计模式不是编程语言,它修炼的是程序员的内功。因此,对于一个开发者来说,学习设计模式是非常必要的。

设计模式类型


GOF提出的23中设计模式为人们所熟知,很多其他的也在不断被发明出来。
注意:设计模式不是习语,或者算法,或者组件。

设计模式分为三种类型,共23种。

  • 创建型模式:单例模式、抽象工厂模式、建造者模式、工厂模式、原型模式。
  • 结构型模式:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式。
  • 行为型模式:模版方法模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、职责链模式、访问者模式。

  1. 创建型模式:社会化的分工越来越细,自然在软件设计方面也是如此,因此对象的创建和对象的使用分开也就成为了必然趋势。因为对象的创建会消耗掉系统的很多资源,所以单独对对象的创建进行研究,从而能够高效地创建对象就是创建型模式要探讨的问题。

  2. 结构型模式:在解决了对象的创建问题之后,对象的组成以及对象之间的依赖关系就成了开发人员关注的焦点,因为如何设计对象的结构、继承和依赖关系会影响到后续程序的维护性、代码的健壮性、耦合性等。对象结构的设计很容易体现出设计人员水平的高低。

  3. 行为型模式:在对象的结构和对象的创建问题都解决了之后,就剩下对象的行为问题了,如果对象的行为设计的好,那么对象的行为就会更清晰,它们之间的协作效率就会提高。


参考:
- 设计模式(百度百科)
- Head First设计模式
- 设计模式之禅


【地铁上的设计模式】--前言 第一部分介绍了设计模式的概念和基本原理,为后续的深入学习奠定了基础。第二部分包括创建型模式,这些模式关注对象的创建和初始化,包括工厂方法模式、抽象工厂模式、单例模式、建造者模式和原型模式。第三部分包括结构型模式,这些模式关注对象的组合和关系,包括适配器模式、桥接模式、组合模式、装饰器模式、外观模式、享元模式和代理模式。第四部分包括行为型模式,这些模式关注对象之间的交互和协作,包括责任链模式、命令模式、解释器模式、迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式、策略模式、模板方法模式和访问者模式。 阅读详情

相关推荐

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

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

weixin_28452161的博客 357

设计模式(前言)——简介

设计模式(前言)——简介简介软件模式基础结构作用面向对象设计原则 简介 软件模式基础结构 问题描述:待解决的问题是什么 前提条件:在任何环境和约束条件下使用 解法:关联解法和其它相关模式 效果:优缺点 作用 设计模式是为了可重用代码,保证代码可靠性,及使代码更容易被他人所理解。设计模式可使代码编制真正工程化。每种设计模式都描述了一个我们周围不断发生的问题,以及该问题的核心解决方案。 面向对象设...

qq_28376741的博客 477

全局子程序 参数调用

为什么要子程序: 为了实现程序结构化,我们尽量使用不同功能的功能块来实现一些特定的功能, 子程序接口: 使用过程的注意事项,尤其是数组使用时的注意事项 从一个主程序中可以将参数传递到局部或全局子程序和函数中。 怎样传递参数有 2 种方式: 作为 IN 参数 变量值在主程序中保持不变。 这种传递方式也称为“ 值传递 (Call by Value)”。 作为 OUT 参数 子程序读取并更改该值,然后将新值写回到主程序中。 这种传递方式也称为“Call by Reference”。 举例说明 1 DEF MY

Eric_Yang1024的博客 1095

软件设计模式系列之前言

有些人可能觉得设计模式很遥远,感觉高不可攀。其实不然。我之前有听过一场设计模式的讲座,听的我稀里糊涂的,以至于我在很长一段时间内觉得设计模式很抽象,难以触及。所以这学期的体系结构讲到设计模式那块的时候,我听的非常仔细,听了几节课后觉得设计模式也没怎么高不可攀,并且对他产生了浓厚的兴趣(主要是我们老师讲的好,嘿嘿),之后自己看了很多资料,感触很深。这篇系列博文呢,主要也是为了和大家分享我的一些感悟...

nayao-net 229

【芯片验证随心记】1.SystemVerilog中,rand和randc的区别?如何用constraint实现randc?

在SystemVerilog里,randc 的“不重复循环”特性是用一个 周期性排列器(permutation engine) 实现的,而这个引擎在 LRM 里并没有公开。我们只能在 “用户空间” 用 rand + constraint 去模仿它的行为。每次随机化只取 queue.pop_front(),用完再洗。在4次随机化内,y会依次出现0,1,2,3各一次(顺序随机)每次随机化,x可能是0-3中的任意值,可能连续多次相同。每次随机化时,在未使用的值里随机挑一个;第5次随机化时,重新生成新的排列周期。

qq_43172512的博客 342

地图坐标系大全:常用地图坐标系详解与转换指南

地图坐标系是用于描述地图上位置的数学模型。它可以用来表示地球表面上的任意一个点,使得这个点的位置可以在地图上精确定位。不同的地图坐标系采用不同的基准面和投影方式,因此会有不同的坐标系参数,不同的坐标系之间也需要进行坐标转换。在地图制图、导航、GIS等领域中,地图坐标系是一个非常重要的概念。

weixin_39888010的博客 1万+

阅读设计模式前言

阅读设计模式前言

u010947098的专栏 333

化工过程设计软件:Aspen Plus二次开发_(2).二次开发概述

假设我们需要创建一个自定义的换热器模型,该模型能够计算两个物流之间的热交换量,并根据传热系数和换热面积进行调整。ACM 模型代码示例!自定义换热器模型!参数:传热系数 U (W/m^2·K)!换热面积 A (m^2)!热物流 T_hot_in (K), T_hot_out (K), F_hot (kmol/h)!冷物流 T_cold_in (K), T_cold_out (K), F_cold (kmol/h)!模型输入!U - 传热系数!A - 换热面积!

kkchenjj的博客 368

23种设计模式(前言)

23种设计模式(前言) (愿岁月清净) 1.了解设计模式 设计模式(Design Pattern)是前辈们对代码开发经验的总结,是解决特定问题的一系列套路。是一套用来提高代码可复用性、可维护性、可读性、稳健性以及安全性的解决方案。 1995 年,GoF(Gang of Four,四人组/四人帮)合作出版了《设计模式:可复用面向对象软件的基础》一书,共收录了 23 种设计模式,从此树立了软件设计模式领域的里程碑,人称「GoF设计模式」。(据说挺帅的)- -! 2.学习设计模式的意义 这 23 种设计模式的本质

Xiao_Jin_Ling的博客 220

反卷积通俗详细解析与nn.ConvTranspose2d重要参数解释

反卷积的作用 卷积中padding的几个概念 No Padding Half(Same) Padding Full Padding 反卷积 反卷积中的Padding参数 反卷积的stride参数 反卷积总结 参考资料

iioSnail的博客 2万+

用Python实现辅助病案首页主诊断编码:从数据清洗到模型上线(上)

本文介绍了一个使用Python构建AI辅助病案首页主诊断编码系统的完整指南。文章从环境搭建开始,详细讲解了数据准备与清洗策略,包括数据格式标准化、文本清洗与脱敏处理等关键步骤。系统采用深度学习技术处理复杂的医疗文本,解决ICD编码面临的文本复杂性、专业性和数据不一致性等挑战。文中提供了完整的代码实现,涵盖数据预处理、敏感信息脱敏、文本分割等实用功能模块,帮助医疗机构构建可落地、可扩展的智能编码系统,提高编码准确性和工作效率。

AllenLV的博客 922

图解设计模式 -- 前言

一、概念 1、接口和API 接口的多个意思: 1)某个类的接口: 该类所持有的方法的集合。 2)java的 interface:关键字,接口类 区分: 接口(API):application programming interface。 接口: 关键字 interface声明的代码。 2、一些UML UML(Unified Modeling Language 同意建模语言) 1)继承 2)接口的实现 3)聚合关系 4)类间关联 5)时序图(方法调用) tips: 1)看类图顺序: 类(长方形) =

weixin_44919162的博客 360

Android一个APP里面最少有几个线程

Android应用启动时,默认会创建一个进程,该进程中最少包含负责处理用户交互、UI更新等核心操作,所有与界面相关的逻辑必须在此线程执行。若在此线程执行耗时操作(如网络请求),会导致界面卡顿甚至触发ANR(应用无响应)。当对象重写了finalize()方法时,该线程负责将这些对象放入队列并调用其finalize()方法,完成资源释放后再由GC回收。监控的执行效率。如果finalize()方法执行超时(默认10秒),此线程会触发虚拟机退出以防止应用长时间阻塞。

编程进化论 613

设计模式前言

设计模式前言知道设计模式这玩意其实好几年了,但是因为长期用C做驱动方面的工作,与它少有交集.新项目基于Windows平台开发VR项目,基本上用C++敲代码,接着基于openVR做驱动,官方提供的demo,从代码结构来说,不是很规范,VR目前最大的痛点,个人觉得是在内容和外设上,目前的openVR提供的代码,扩展外设蹩脚,打算用点设计模式的方法整理一下,做好接口,毕竟很多外设还是需要第三方来提供,同时

3287

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

C#设计模式前言

C#设计模式(1) http://www.cnblogs.com/zhenyulu/articles/36058.aspx 课本:《C#设计模式》,电子工业出版社,ISBN 7-5053-8979-3。33元含光盘。 课程内容:设计模式 来源:亚历山大的建筑模式、Gamma等人(1995)创作的"Design Patterns: Elements of Reusable Software

jiangxinyu的专栏 1734

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

《C#设计模式》前言

昨日收到清华大学出版社寄来的《C#设计模式》样书,本书在之前几本Java版的设计模式书籍的基础上又补充了不少内容,并配有大量的实例和习题,还赠送设计模式综合测试题两套,,希望能够给C#开发人员和一些高校师生带来帮助,。         以下是本书的前言部分: 前    言              设计模式和敏捷开发方法的创始人之一Erich Gamma曾说过:“设计和开发面向对象软件是非常困难的

刘伟技术博客 9001

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

23种设计模式——前言

设计模式的六大原则 1、开闭原则(Open Close Principle) 2、里氏代换原则(Liskov Substitution Principle) 3、依赖倒转原则(Dependence Inversion Principle) 4、接口隔离原则(Interface Segregation Principle) 5、迪米特法则,又称最少知道原则(Demeter Principle) 6、合成复用原则(Composite Reuse Principle)

shiboluobuding的博客 1088

《设计模式之禅》前言

cbf4life的专栏 6037

设计模式 前言

1.前言 GoF的《设计模式》一书,一共有以下三个层面的内容: 指出编程开发活动中存在模式,提出总结设计模式需要关注的四要素 "名称-问题-解决方案-效果“ ,并给出描述一套模式的格式模板; 提出了面向对象开发中”针对接口编程优于针对实现编程”,”组合优于继承”的总体设计思路; 选取了现实开发中基于上述设计思路所形成的23种常见设计模式作为例子详细描述。 虽然第3点包括的多个具体的设计模式实例占据了最多的篇幅,但事实上第1点和第2点才是纲。 2.何时使用设计模式 《设计模式》书中有一句很关键

方寸间沧海桑田的博客 318

设计模式之前言

序言 在IT圈子的朋友应该有这样的体会:构建一个优秀的系统最困难之处不在于编码(coding),而是在早期做出的设计(design)上的决定。设计是软件开发生命周期中的关键阶段,好的设计能产生好的产品,而不当的设计则会影响最终产品的质量。一个软件设计的优劣,往往越到后期拓展越能体现出差异。 再说一个我周边一个比较普遍的现象:         开发人员在入行初期,拿到需求之后,大刀阔斧直接开始上手coding,然后就被反反复

剑行歌之 1万+

【设计模式】01-前言

评估一个面向对象系统的质量时,方法之一就是要判断系统的设计者是否强调了对象之间的公共协同关系。在系统开发阶段强调这种机制的优势在于,它能使所生成的系统体系结构更加精巧、简洁和易于理解,其程度远远超过了未使用模式的体系结构。设计模式描述了在面向对象软件设计过程中针对特定问题的简洁而优雅的解决方案。设计模式捕获了随时间进化与发展的问题的求解方法,因此它们并不是人们从一开始就采用的设计方案。它们反映了不为人知的重新设计和重新编码的成果,而这些都来自软件开发者为了设计出灵活、可复用的软件而长时间进行的艰苦努力。

C与Python实战 1305

Java23种设计模式之前言

对扩展开放、对修改封闭。核心做法是把可变部分抽象出来、通过接口/抽象类暴露扩展点,具体行为通过实现类扩展,尽量不修改已有稳定代码。常用模式:策略、模板方法、装饰器、工厂、抽象工厂、桥接、命令、观察者等。那时苦根有三岁了,这孩子坐在凳子上摇晃着两条腿,正使劲在听我们说话,眼睛睁得很圆。“我只有这点想想凤霞的福分。

梦想是很难很难的,所以先勇敢一点 291
下一篇: 设计模式-观察者模式
「已注销」
博客等级 码龄11年 14粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值