`

学习设计模式的一些常见问题

阅读更多
根据最近热心读者的反馈,这里列出来一些常见的设计模式的问题,进行解答。如何领悟设计模式中的面向对象思想,还是请下载《漫谈设计模式》
学习设计模式的一些常见问题
1. 模式有没有标准形式?
GoF为了描述每一种设计模式,给它们定义了四个基本要素,旨在模式使模式能够得到广泛传播,这并不代表GoF给出的模式就是标准模式。事实上,他们也没有给每一种模式给出标准,而是很多地方给出了它们可能的变化,比如像组合(Composite)模式,有透明的组合模式,也有安全的组合模式,还例如观察者(Observer)模式,有push和pull两种形式。

这些设计模式只是为常见问题给出经验人士的一个参考方案,避免我们重复的发明轮子,而没有血统之分(哪个标准,哪个不标准),所以这个问题是个伪命题。
2. 设计模式和OO什么关系?
设计模式最初引入的时候,正处于面向对象设计高速发展时期,那些模式都是来自成功的面向对象系统的某些部分,所以这23个最基本的模式都是关于面向对象的,但这不表示只有面向对象才有模式。我们知道,模式是是某一上下文环境中一个问题的常用解决方案,那么,SOA(Service-Oriented Architecture)可以有模式,Agile也可以有模式,OSGI(Open Services Gateway initiative)也有模式。
3. 能不能创造新的设计模式?
完全可以,只要你能给一个上下文的问题给出一个通用的解决方案,并能使用GoF的四个基本要素描述它们。但是要避免重复的发明轮子,你必须了解你创造的是否已经存在,或者是否是已存在模式的变种。
4. 学习了设计模式,就等于学会了设计?
学习设计模式只是借鉴OO专家的成功经验,要学会设计,还得向他们一样,学会使用OO的眼光看待问题,解决问题。这样,在解决问题的过程中,模式就会手到擒来,并且自然地变化它们以适应你的问题本身。
5. 设计模式是OO设计的根本吗?
解决问题才是根本,模式只是关于解决问题的经验总结。笔者最初学习设计模式之后,以为优雅的设计就是尽可能的使用设计模式,所以在解决问题是刻意的套用它们,出现了一些拙劣的设计。后来读取了Eric Evans的《Domain-Driven Design: Tackling Complexity in the Heart of Software》一书,才意识到为领域建模的重要性,为解决问题,要为你的领域问题建立合理的模型,既然OO能够为软件编程带来巨大的变化,我们就要学会使用OO的眼光分析问题,享受OO给编程带来的莫大好处。

于是紧接着,在后来的一个软件开发中,我开始从问题本质入手,“忘却”模式,为问题提取模型,等设计开发完成之后,发现,我已经自然而然的使用了组合(Composite)模式和解释器(Interpreter)等模式。至此,我才意识到使用OO眼光分析问题的重要性,所以,这本书籍并不是单纯介绍模式的书籍,而是和大家一起探讨OOP,分析OOP给编程带来的好处,希望阅读完本书的人都能开始使用OO的眼光分析问题。
6. 软件的核心是什么?
软件的核心是模型,为复杂领域问题提取精炼的模型是根本。我们要学会使用OO这把利器,借助它的眼光来分析问题解决问题,这样才能做出客户满意的软件。
分享到:
评论

相关推荐

    学习设计模式的一些感想

    学习设计模式可以提高编程者的编码能力和设计水平,减少代码重复和维护难度。通过本文,我们将探讨学习设计模式的必要性,并通过三个例子来展示设计模式在实践中的应用。 一、代码量激增、程序可维护性面临挑战 在...

    设计模式之美—学习笔记

    学习设计模式并不意味着要在所有地方都硬套模式,而是要理解其背后的意图,灵活地在适当的地方应用,以解决实际问题。 设计模式之美在于它们是软件设计的通用语言,无论你使用哪种编程语言,都能通过这些模式与他人...

    Head First 设计模式 +Java设计模式(第2版)

    设计模式是解决软件设计中常见问题的经验总结,它们提供了一种标准的方法来处理特定场景下的问题,使得代码更易于理解、维护和扩展。这两本书对于Java开发者来说尤其宝贵,因为它们不仅介绍了设计模式的概念,还提供...

    设计模式如何学习.docx

    设计模式 学习设计模式可以帮助你提高软件设计能力,编写更清晰、可维护的代码。以下是一些有效的学习策略和步骤: 1. 理解基本概念 什么是设计模式:了解设计模式的定义、重要性和分类(创建型、结构型、行为型)...

    设计模式学习 ppt

    设计模式也是面试中常见的考察点,因此这份资料对于准备面试的程序员也大有裨益。 总结来说,"设计模式学习ppt"是一个全面介绍设计模式的教育材料,它将帮助学生和开发者掌握设计模式的核心理念,提升软件设计能力...

    java设计模式学习

    在软件开发领域,设计模式是经过时间和实践验证的解决方案,用于解决常见的编程问题。Java设计模式是面向对象编程中的一种最佳实践,它提供了一种在特定情境下组织代码的通用方法。本资料“java设计模式学习”包含了...

    24种设计模式以及混合设计模式

    设计模式是软件工程中的一种重要思想,它是在特定情境下,为解决常见问题而形成的一套最佳实践。在本文中,我们将深入探讨24种设计模式,并结合混合设计模式的概念,以及它们在实际项目中的应用案例。 首先,设计...

    Python技术设计模式常见问题解答.docx

    Python 技术设计模式在软件开发中扮演着重要的角色,它们是解决常见设计问题的成熟方案,能够提高代码的可读性、可维护性和可扩展性。设计模式分为创建型、结构型和行为型三大类别,每种都有其特定的应用场景。 ...

    设计模式解析.pdf

    书籍作者分享了个人学习设计模式的心路历程,强调了从简单的面向对象编程到深入理解设计模式,再到真正领悟面向对象设计精髓的过程。作者曾自认为在面向对象分析与设计方面有相当的造诣,拥有多个行业的设计与实现...

    设计模式学习总结.doc

    这篇文档主要讨论了设计模式的概念、作用、应用以及学习设计模式时应注意的误区。 设计模式起源于面向对象编程领域,它是一种可复用的软件设计解决方案,旨在提升代码的灵活性、可维护性和可扩展性。正如标题和描述...

    《设计模式学习笔记》

    设计模式是面向对象软件设计中的核心概念,它们为解决常见的设计问题提供了标准的、可重用的方法。 首先,设计模式可以被理解为针对软件设计,特别是类和对象设计的可重用解决方案。正确运用设计模式有助于我们构建...

    GOF设计模式中英文+设计模式精解中英文

    设计模式是软件工程中的一种重要概念,用于解决在软件开发过程中常见的设计问题,提升代码的可复用性、可维护性和可扩展性。GOF(Gang of Four)设计模式,由Erich Gamma、Richard Helm、Ralph Johnson和John ...

    java设计模式中英文各种版本打包下载 学习设计模式必备材料

    Java设计模式是软件工程中的一种最佳实践,它提供了一种在特定情况下解决常见问题的模板。这些模式来自于经验丰富的开发者们在实际项目中遇到的问题及其解决方案,并被广泛接受和使用。设计模式并不是具体的代码或库...

    设计模式(包含5个设计模式)含源代码报告.rar

    在软件开发领域,设计模式是经过时间和实践验证的解决方案,用于解决常见的编程问题。这个压缩包文件"设计模式(包含5个设计模式)含源代码报告.rar"显然是一份宝贵的资源,它涵盖了五个核心的设计模式,并附带了详细...

    新版设计模式手册 - C#设计模式(第二版)

    设计模式是解决软件开发中常见问题的经验总结,是软件工程的最佳实践之一。本手册将详细阐述23种经典设计模式,并结合C#语言特性,给出具体实现和应用示例。 首先,我们来了解一下设计模式的基本概念。设计模式是...

    深入浅出设计模式(中文版)

    通过学习设计模式,开发者可以提高代码的可读性,减少代码冗余,提升软件的可维护性和可扩展性。设计模式也是面试中常见的考察点,熟练掌握设计模式有助于求职者展示其专业素养。 此外,书中还可能涉及设计原则,如...

    设计模式学习.zip

    设计模式是一种在软件设计中被广泛采用的解决常见问题的经验总结,它代表了最佳实践,是前辈们在软件开发过程中积累的智慧结晶。本资源"设计模式学习.zip"聚焦于C++编程语言中的设计模式应用,是2017年的一次黑马...

    C#设计模式/常见设计模式的解析和实现(C++)/设计模式迷你手册.rar

    设计模式是软件工程中的一种重要概念,它是在特定情境下,为解决常见问题而形成的一套最佳实践。在C#和C++这样的面向对象编程语言中,设计模式的应用能够提高代码的可读性、可维护性和复用性。本资料集合了关于C#...

    设计模式学习笔记总结

    在IT行业中,设计模式是软件开发中的重要概念,它们代表了在特定场景下解决常见问题的最佳实践。这里我们聚焦于C#语言中的设计模式学习笔记,涵盖了多种经典的设计模式,如合成模式、桥梁模式、装饰模式、享元模式、...

    设计模式之蝉

    在计算机科学领域,设计模式是软件工程中用于解决特定问题的一般性方案,它们是经过实践检验的最佳实践。这些模式被广泛应用于面向对象软件设计中,能够提高代码的可重用性、灵活性和可维护性。设计模式通常被划分为...

Global site tag (gtag.js) - Google Analytics