`
zhangweieye
  • 浏览: 9748 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

设计模式学习笔记(总结篇:模式分类)

 
阅读更多

GOF根据模式的目标将模式分为三个类目:创建型、行为型和结构型。

 

创建型模式

  创建型模式设计对象的实例化,这类模式的特点是,不让用户依赖于对象的创建或排列方式,避免用户直接使用new运算符创建对象。

    GOF23中模式中的下列5种模式属于创建型模式:

(1)工厂方法模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使一个类的实例化延迟到其子类。

(2)抽象工厂模式:提供一个创建一系列或相互依赖对象的接口,而无须指定它们具体的类。

(3)生成器模式:将一个复杂对象的创建与它的表示分离,使得同样的创建过程可以创建不同的表示。

(4)原型模式:将原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象。

(5)单件模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点。

 

 

行为型模式

    行为模式涉及怎样合理地设计对象之间的交互通信,以及怎样合理为对象分配职责,让设计富有弹性,易维护和易复用。

    GOF23种模式中的下列11种模式属于创建型模式:

(1)责任链模式:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。

(2)命令模式:将一个请求封装为一个对象,从而可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。

(3)解释器模式:给定一个语言,定义它文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。

(4)迭代器模式:提供一种方法顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示。

(5)中介者模式:用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显示地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。

(6)备忘录模式:在不破坏封装性的情况下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样以后就可将该对象恢复到原先保存的状态。

(7)观察者模式:定义对象间的一种一对多的依赖关系,当一个对象的状态发生变化时,所有依赖于它的对象都得到通知并被自动更新。

(8)状态模式:允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。

(9)策略模式:定义一系列算法,把它们一个个封装起来,并且可使它们可以相互替换。策略模式使算法可独立于使用它的客户而变化。

(10)模板方法模式:定义一个操作中算法的骨架,而将一些步骤延迟到子类中。模板方法使子类可以不改变一个算法的结构即可定义该算法的某些特定步骤。

(11)访问者模式:表示一个作用于某对象结构中的各个元素的操作。它可以在不改变各个元素的类的前提下定义作用于这些元素的新操作。

 

 

结构型模式

    结构型模式涉及如何组合类和对象以形成更大的结构,和类有关的结构型模式设计如何合理地使用继承机制;和对象有关的结构型模式涉及如何合理地使用对象组合机制。

    GOF23种模式中的下列7种模式属于创建型模式:

(1)适配器模式:将一个类的接口转换成客户希望的另外一个接口。Adapter模式使原本由于接口不兼容而不能一起工作的那些类可以一起工作。

(2)组合模式:将对象组合成数形结构以表示”部分-整体“的层次结构。Composite使用户对单个对象和组合对象的使用具有一致性。

(3)代理模式:为其他对象提供一种代理以控制对这个对象的访问。

(4)享元模式:运用共享技术有效地支持大量细粒度的对象。

(5)外观模式:为系统的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使这一子系统更加容易使用。

(6)桥接模式:将抽象部分与它的实现部分分离,使它们都可以独立地变化。

(7)装饰模式:动态地给对象添加一些额外的职责,就功能来说装饰模式相比生成子类更为灵活。

分享到:
评论

相关推荐

    设计模式的读书总结笔记

    这篇“设计模式的读书总结笔记”是对设计模式深入理解和应用的结晶,包含对各种模式的实例解析、优缺点分析以及如何在实际项目中应用的指导。 一、设计模式的基本概念 设计模式并不直接提供代码实现,而是描述在...

    DSP学习笔记有助DSP知识的学习

    ### DSP学习笔记有助DSP知识的学习 #### 一、引言 数字信号处理(Digital Signal Processing,简称DSP)是一门涉及广泛领域的学科,它主要研究如何通过计算机或专用处理设备对信号进行数字化处理的方法和技术。...

    UBOOT源码阅读笔记

    通过阅读UBOOT源码,不仅可以深入了解嵌入式系统的启动过程,还能学习到高效的编程技巧和设计模式。对于从事嵌入式开发的技术人员来说,掌握UBOOT的相关知识是非常有帮助的。希望本文能为读者提供一个良好的起点,...

    软考系统架构设计师笔记精心整理 .docx

    综上所述,从系统集成模式到具体的架构设计策略,再到软件设计模式的应用,本篇文档全面覆盖了系统架构设计师在实际工作中所需要掌握的核心知识点。通过对这些内容的学习和理解,可以有效地帮助考生理解和掌握系统...

    AN0024-RT-Thread-ulog 日志组件应用笔记 - 进阶篇1

    《RT-Thread ULOG日志组件应用笔记 - 进阶篇》 RT-THREAD ULOG是RT-THREAD实时操作系统中的一个关键组件,用于提供高效、灵活的日志记录功能。本篇应用笔记主要针对进阶用户,详细介绍ULOG的高级特性,帮助开发者更...

    study-notes:一些学习笔记,技术笔记,博客文章的Markdown原始都会放在这

    在实际内容中,我们可能会找到按主题分类的笔记,例如不同编程语言的教程、设计模式的解释、特定技术的使用指南,以及作者在解决实际问题时遇到的难题和经验总结。 综合来看,"study-notes"是一个全面的、开源的...

    计算机书籍读书笔记.docx

    - 导航的目标是帮助用户高效地完成任务,因此设计时应考虑用户的需求和行为模式。 - 情景式导航(contextual navigation)根据用户当前状态提供相关信息,成为一种趋势。 #### 第五篇:CSS六大密技 **1. CSS字体...

    七年级语文上册 论语十则 重点与难点 人教新课标版 试题.doc

    3. 理读课文:在这个环节,教师提供“分类式学习笔记”模板,让学生按类别整理所学,如孔子的生平、成语的出处和用途、名言警句的分类以及难句翻译。完成后,学生间互相检查笔记,以巩固学习成果。 通过这样的教学...

    2021年系统架构复习笔记(按章节).docx

    本篇复习笔记主要涵盖了2021年系统架构师考试的关键知识点,旨在帮助有一定基础的考生快速掌握考试所需的知识,提升通过率。笔记首先介绍了系统架构的概念及其发展历史,强调了规划在架构中的核心地位。系统架构包括...

    网络教学支撑平台PPT学习教案.pptx

    本篇内容将深入探讨网络教学平台的基本功能、设计思想、体系结构以及在教与学活动中的应用。 一、网络教学平台的基本功能 网络教学平台的核心功能包括以下几个方面: 1. 课程材料制作与发布:教师可以上传课件、...

    电源技术-信号完整性资料合集.zip

    《信号完整性分析》的读书笔记和总结 《信号完整性设计秘诀最全合集》 参考平面转换时信号完整性问题研究 电地完整性、信号完整性分析导论 电子与通信教材系列 信号完整性分析 高速电路的信号完整性分析 高速电路...

    电脑调研报告3篇.pdf

    在总结部分,报告会整合所有数据和分析结果,提出对电脑制造商、零售商和政策制定者的建议,如改进产品设计、优化营销策略、提高服务质量等。 九、未来的发展思路 对未来电脑市场的发展趋势进行预测,可能包括技术...

    基于粒子群优化的神经网络算法与天线设计.zip

    神经网络是人工智能和机器学习领域的核心组成部分,其通过学习大量数据中的模式和规律,实现对未知数据的预测和分类。而“算法”在这里指的是粒子群优化算法,它是解决优化问题的一种计算方法,尤其适用于处理非线性...

    云计算在英语教学中的应用现状分析.pdf

    但在中国,自2011年到2015年期间,相关研究论文达292篇,其中理论研究(包括课程设计、理论分析、教学模式构建等)占了绝大多数,达到285篇,而基于应用实践层面的研究仅有7篇。从这些数据中可以看出,云计算技术在...

    车牌识别开发

    EasyPR最初是基于CSDN博客上的一篇读书笔记,该笔记描述了如何利用开源的机器学习库,基于一本书中介绍的车牌识别技术来构建一个车牌系统的雏形。这个系统最初是针对西班牙的车牌设计的,因此系统训练所使用的模型也...

    Papers:阅读论文

    这篇压缩包文件是一个包含多方面计算机视觉(CV)领域研究论文的资源集合,特别关注深度学习技术在图像检测(detection)、卷积神经网络(CNN)架构设计(如Pytorch、MXnet、Tensorflow、Keras、Chainer上的实现)、...

    Java基于前后端分离的个性化Wiki知识库社区源码.zip

    在现代Web开发中,前后端分离已经成为一种主流架构模式,它将应用的用户界面与业务逻辑分离,从而提高开发效率,增强系统的可维护性和扩展性。本篇将深度解析一款基于Java实现的前后端分离的个性化Wiki知识库社区...

Global site tag (gtag.js) - Google Analytics