设计模式概述

简介: 设计模式是软件工程中的最佳实践,帮助开发者解决常见问题,提高代码的可重用性、可读性和可靠性。学习设计模式可以提升思维能力、标准化程序设计、增强代码质量。文章介绍了设计模式的分类(创建型、结构型、行为型)及其在流行框架中的应用,建议读者掌握SOLID原则并深入学习GoF的23种设计模式。

设计模式概述

设计模式是软件工程中的一种最佳实践,它描述了软件设计过程中一些常见问题的解决方案。这些模式是经过验证的、可重用的设计方案,可以帮助开发者解决特定的问题,提高代码的可重用性、可读性和可靠性。

在学习设计模式之前,建议至少要学会自己画UML图中的类图,这在之后的文章中我会做详细讲解。

为什么要学习设计模式

  1. 提高思维能力:设计模式是对面向对象设计原则的实际运用,有助于提高程序员的思维能力、编程能力和设计能力。
  2. 标准化程序设计:使程序设计更加标准化,代码编制更加工程化,提高软件开发效率,缩短开发周期。
  3. 增强代码质量:设计的代码具有高可重用性、强可读性、高可靠性、良好灵活性和易维护性。

如何学习设计模式

  1. 理解基本原则:掌握SOLID原则(单一职责原则、开闭原则、里氏替换原则、接口隔离原则、依赖倒置原则)。
  2. 学习经典模式:深入学习GoF(Gang of Four)的23种设计模式,理解每种模式的适用场景和实现方式。
  3. 实践应用:通过实际项目应用设计模式,加深理解并掌握其精髓。
  4. 阅读源码:分析流行框架的源码,了解设计模式在实际开发中的应用。

流行框架中的设计模式应用

设计模式 应用实例
单例模式 在Spring框架中,Bean的默认作用域是单例,确保每个Bean只有一个实例。
工厂模式 在Java集合框架中,ArrayList、LinkedList等都是通过工厂方法创建的。
装饰器模式 在Java I/O库中,通过装饰器模式动态地给流添加功能,如BufferedReader装饰InputStream。
观察者模式 在GUI编程中,事件监听和处理机制通常使用观察者模式实现。
适配器模式 在Java中,java.util.Arraysjava.util.List之间的适配器。
桥接模式 在GUI框架中,如Swing,将界面与功能分离,使得两者可以独立变化。
组合模式 在文件系统中,文件和文件夹的层次结构使用组合模式实现。
策略模式 在排序算法中,不同的排序策略(如快速排序、归并排序)可以通过策略模式动态切换。
模板方法模式 在框架中,定义算法骨架,让子类实现具体步骤,如JUnit中的测试框架。
命令模式 在GUI中,按钮点击事件的处理可以通过命令模式实现。
备忘录模式 在文本编辑器中,保存和恢复文档状态的功能可以通过备忘录模式实现。
状态模式 在工作流管理系统中,任务的不同状态(如待审核、审核中、已完成)可以通过状态模式管理。
访问者模式 在编译器中,对不同的语法结构进行操作(如计算、优化)可以通过访问者模式实现。
中介者模式 在网络应用程序中,组件之间的交互可以通过中介者模式进行解耦。
解释器模式 在解析表达式或命令时,如计算器程序,可以使用解释器模式。
迭代器模式 在集合框架中,遍历元素时使用迭代器模式,如java.util.Iterator
责任链模式 在Web框架中,请求的处理可以通过责任链模式传递给不同的处理器。
享元模式 在数据库连接池中,通过享元模式减少对象的创建和销毁,提高性能。

设计模式的分类

设计模式可以分为三大类:创建型、结构型和行为型。

创建型模式

  • 单例模式:确保一个类只有一个实例,并提供一个全局访问点。
  • 原型模式:通过复制现有的实例创建新的实例。
  • 工厂方法模式:定义一个创建对象的接口,让子类决定实例化哪一个类。
  • 抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口。
  • 建造者模式:构建一个复杂的对象,允许按步骤构造。

结构型模式

  • 适配器模式:将一个类的接口转换成客户希望的另一个接口。
  • 桥接模式:将抽象部分与实现部分分离,使它们可以独立变化。
  • 组合模式:将对象组合成树形结构以表示“部分-整体”的层次结构。
  • 装饰模式:动态地给一个对象添加额外的职责。
  • 外观模式:为子系统中的一组接口提供一个一致的界面。
  • 享元模式:通过共享来高效地支持大量细粒度的对象。
  • 代理模式:提供一个与真实对象相同的接口的代理对象来控制对真实对象的访问。

行为型模式

  • 策略模式:定义一系列算法,把它们一个个封装起来,并使它们可互换。
  • 模板方法模式:在方法中定义一个算法的框架,而将一些步骤延迟到子类中实现。
  • 观察者模式:对象间的一种一对多的依赖关系。
  • 迭代器模式:顺序访问一个聚合对象中的各个元素,不暴露其内部的表示。
  • 责任链模式:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。
  • 命令模式:将请求封装为一个对象,从而使用户可用不同的请求对客户进行参数化。
  • 备忘录模式:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。
  • 状态模式:允许一个对象在其内部状态发生改变时改变其行为。
  • 访问者模式:为一个对象结构(如组合结构)增加新能力。
  • 解释器模式:为某个语言定义了它的语法(或表达式)的表示,并定义了一个解释器来解释这个语法
  • 中介者模式:通过引入一个中介者对象来封装一组对象之间的交互

概括


目录
相关文章
|
设计模式 算法 程序员
设计模式的概述及各个模式的功能介绍
设计模式的概述及各个模式的功能介绍
174 0
|
9月前
|
设计模式 存储 安全
【23种设计模式·全精解析 | 创建型模式篇】5种创建型模式的结构概述、实现、优缺点、扩展、使用场景、源码解析
创建型模式的主要关注点是“怎样创建对象?”,它的主要特点是"将对象的创建与使用分离”。这样可以降低系统的耦合度,使用者不需要关注对象的创建细节。创建型模式分为5种:单例模式、工厂方法模式抽象工厂式、原型模式、建造者模式。
【23种设计模式·全精解析 | 创建型模式篇】5种创建型模式的结构概述、实现、优缺点、扩展、使用场景、源码解析
|
9月前
|
存储 设计模式 算法
【23种设计模式·全精解析 | 行为型模式篇】11种行为型模式的结构概述、案例实现、优缺点、扩展对比、使用场景、源码解析
行为型模式用于描述程序在运行时复杂的流程控制,即描述多个类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务,它涉及算法与对象间职责的分配。行为型模式分为类行为模式和对象行为模式,前者采用继承机制来在类间分派行为,后者采用组合或聚合在对象间分配行为。由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象行为模式比类行为模式具有更大的灵活性。 行为型模式分为: • 模板方法模式 • 策略模式 • 命令模式 • 职责链模式 • 状态模式 • 观察者模式 • 中介者模式 • 迭代器模式 • 访问者模式 • 备忘录模式 • 解释器模式
【23种设计模式·全精解析 | 行为型模式篇】11种行为型模式的结构概述、案例实现、优缺点、扩展对比、使用场景、源码解析
|
9月前
|
设计模式 存储 安全
【23种设计模式·全精解析 | 创建型模式篇】5种创建型模式的结构概述、实现、优缺点、扩展、使用场景、源码解析
结构型模式描述如何将类或对象按某种布局组成更大的结构。它分为类结构型模式和对象结构型模式,前者采用继承机制来组织接口和类,后者釆用组合或聚合来组合对象。由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象结构型模式比类结构型模式具有更大的灵活性。 结构型模式分为以下 7 种: • 代理模式 • 适配器模式 • 装饰者模式 • 桥接模式 • 外观模式 • 组合模式 • 享元模式
【23种设计模式·全精解析 | 创建型模式篇】5种创建型模式的结构概述、实现、优缺点、扩展、使用场景、源码解析
|
9月前
|
设计模式 Java 程序员
【23种设计模式·全精解析 | 概述篇】设计模式概述、UML图、软件设计原则
本系列文章聚焦于面向对象软件设计中的设计模式,旨在帮助开发人员掌握23种经典设计模式及其应用。内容分为三大部分:第一部分介绍设计模式的概念、UML图和软件设计原则;第二部分详细讲解创建型、结构型和行为型模式,并配以代码示例;第三部分通过自定义Spring的IOC功能综合案例,展示如何将常用设计模式应用于实际项目中。通过学习这些内容,读者可以提升编程能力,提高代码的可维护性和复用性。
1697 1
【23种设计模式·全精解析 | 概述篇】设计模式概述、UML图、软件设计原则
|
设计模式 数据可视化 测试技术
设计模式概述
设计模式概述
112 1
设计模式概述
|
设计模式 Java 开发者
设计模式概述
设计模式概述
|
设计模式 算法 Java
Java设计模式:核心概述(一)
Java设计模式:核心概述(一)
|
设计模式 缓存 算法
设计模式概述
设计模式概述
136 0
|
设计模式 安全
设计模式概述
设计模式概述
91 0