热门标签 | HotTags
当前位置:  开发笔记 > 程序员 > 正文

[学习笔记]设计模式[b]-{与设计模式相处}

学习的结束就是实践的开始!设计模式的定义说了这么多的设计模式,现在来给大家介绍设计模式的正式定义:模式是在某个情景下,针对某问题的某种解决方案。情景就是应用的某个模式的情况。这应该

学习的结束就是实践的开始!

设计模式的定义

说了这么多的设计模式,现在来给大家介绍设计模式的正式定义:
模式是在某个情景下,针对某问题的某种解决方案。
情景就是应用的某个模式的情况。这应该是会不断出现的情况
问题就是你想在某情景下达到的目标,但也可以是某情景下的约束。
解决方案就是你所追求的:一个通用的设计,用来解决约束、达到目标。
我的理解就是,在很多情境下有相同或相似的问题,而如何解决这类问题达到目标,这种方法的抽象,就是设计模式。

设计模式的类目

设计模式通常被分为三类:创建型、行为型、结构型。
下面分别是三类的定义:
创建型模式涉及到将对象实例化,这类的设计模式都提供一个方法,将客户从所需要实例化的对象中解耦。
这类模式很好理解,就是会生产实例化对象的模式,属于这类的设计模式有单例模式工厂模式等等

行为型模式,这类的设计模式会涉及到类和对象如何交互及分配职责。这种模式涉及到了类和对象的职责,一般都有多个对象和类参与到这种设计模式中来,属于这种设计模式的有观察者模式迭代器模式状态模式命令模式等等

结构型模式可以让你把类或对象组合到更大的结构中。这种模式对原有的类或对象的功能或职责改动不大,而主要是扩展的作用。属于这种类型的设计模式有装饰者模式外观模式适配器模式等等

使用设计模式的心智

书中介绍了使用设计模式的心智历程,下面对其简单的总结:
初学者到处使用设计模式,虽然这样可以借此培养许多使用设计模式的实战经验,但是并不是“使用越多的模式,设计就越好”,初学者慢慢会意识到,只有在需要实现拓展的地方,才值得使用复杂性和模式。
中级人员则可以开始分辨什么时候需要使用模式,虽然他们还是会企图把过多的模式套用在不合适的地方,但是他们会意识到设计模式的不适应性,并对其改编使其适应。
悟道者(高级人员)则能够看到设计模式在何处可以自然的融入,他们并不急切地使用模式,而是致力于最能解决问题的简单方案。他们会考虑对象的原则,以及他们之间的折中,当有设计模式可以更简单地解决时,他们就会拿捏得宜地使用设计模式。

书中还给出了第一条警告,这里作为设计模式学习笔记的最后结尾:
过度使用设计模式可能导致代码被过度工程化。应该总是用最简单的解决方案完成工作,并在真正需要模式的地方才使用它


推荐阅读
  • 深入解析Android自定义View面试题
    本文探讨了Android Launcher开发中自定义View的重要性,并通过一道经典的面试题,帮助开发者更好地理解自定义View的实现细节。文章不仅涵盖了基础知识,还提供了实际操作建议。 ... [详细]
  • 本文详细分析了JSP(JavaServer Pages)技术的主要优点和缺点,帮助开发者更好地理解其适用场景及潜在挑战。JSP作为一种服务器端技术,广泛应用于Web开发中。 ... [详细]
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
  • 数据管理权威指南:《DAMA-DMBOK2 数据管理知识体系》
    本书提供了全面的数据管理职能、术语和最佳实践方法的标准行业解释,构建了数据管理的总体框架,为数据管理的发展奠定了坚实的理论基础。适合各类数据管理专业人士和相关领域的从业人员。 ... [详细]
  • 本文详细介绍了Java中org.eclipse.ui.forms.widgets.ExpandableComposite类的addExpansionListener()方法,并提供了多个实际代码示例,帮助开发者更好地理解和使用该方法。这些示例来源于多个知名开源项目,具有很高的参考价值。 ... [详细]
  • 解决PHP与MySQL连接时出现500错误的方法
    本文详细探讨了当使用PHP连接MySQL数据库时遇到500内部服务器错误的多种解决方案,提供了详尽的操作步骤和专业建议。无论是初学者还是有经验的开发者,都能从中受益。 ... [详细]
  • Java内存管理与优化:自动与手动释放策略
    本文深入探讨了Java中的内存管理机制,包括自动垃圾回收和手动释放内存的方法。通过理解这些机制,开发者可以更好地优化程序性能并避免内存泄漏。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • DNN Community 和 Professional 版本的主要差异
    本文详细解析了 DotNetNuke (DNN) 的两种主要版本:Community 和 Professional。通过对比两者的功能和附加组件,帮助用户选择最适合其需求的版本。 ... [详细]
  • Python自动化处理:从Word文档提取内容并生成带水印的PDF
    本文介绍如何利用Python实现从特定网站下载Word文档,去除水印并添加自定义水印,最终将文档转换为PDF格式。该方法适用于批量处理和自动化需求。 ... [详细]
  • 尽管某些细分市场如WAN优化表现不佳,但全球运营商路由器和交换机市场持续增长。根据最新研究,该市场预计在2023年达到202亿美元的规模。 ... [详细]
  • 本文深入探讨了Linux系统中网卡绑定(bonding)的七种工作模式。网卡绑定技术通过将多个物理网卡组合成一个逻辑网卡,实现网络冗余、带宽聚合和负载均衡,在生产环境中广泛应用。文章详细介绍了每种模式的特点、适用场景及配置方法。 ... [详细]
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • 本文探讨了如何在编程中正确处理包含空数组的 JSON 对象,提供了详细的代码示例和解决方案。 ... [详细]
  • Ralph的Kubernetes进阶之旅:集群架构与对象解析
    本文深入探讨了Kubernetes集群的架构和核心对象,详细介绍了Pod、Service、Volume等基本组件,以及更高层次的抽象如Deployment、StatefulSet等,帮助读者全面理解Kubernetes的工作原理。 ... [详细]
author-avatar
永久的花蕾
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有