程序员scholar 程序员scholar
首页
  • Java 基础

    • JavaSE
    • JavaIO
    • JavaAPI速查
  • Java 高级

    • JUC
    • JVM
    • Java新特性
    • 设计模式
  • Web 开发

    • Servlet
    • Java网络编程
  • Web 标准

    • HTML
    • CSS
    • JavaScript
  • 前端框架

    • Vue2
    • Vue3
    • Vue3 + TS
    • 微信小程序
    • uni-app
  • 工具与库

    • jQuery
    • Ajax
    • Axios
    • Webpack
    • Vuex
    • WebSocket
    • 第三方登录
  • 后端与语言扩展

    • ES6
    • Typescript
    • node.js
  • Element-UI
  • Apache ECharts
  • 数据结构
  • HTTP协议
  • HTTPS协议
  • 计算机网络
  • Linux常用命令
  • Windows常用命令
  • SQL数据库

    • MySQL
    • MySQL速查
  • NoSQL数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • RabbitMQ
  • 服务器

    • Nginx
  • Spring框架

    • Spring6
    • SpringMVC
    • SpringBoot
    • SpringSecurity
  • SpringCould微服务

    • SpringCloud基础
    • 微服务之DDD架构思想
  • 日常必备

    • 开发常用工具包
    • Hutoll工具包
    • IDEA常用配置
    • 开发笔记
    • 日常记录
    • 项目部署
    • 网站导航
    • 产品学习
    • 英语学习
  • 代码管理

    • Maven
    • Git教程
    • Git小乌龟教程
  • 运维工具

    • Docker
    • Jenkins
    • Kubernetes
  • 算法笔记

    • 算法思想
    • 刷题笔记
  • 面试问题常见

    • 十大经典排序算法
    • 面试常见问题集锦
关于
GitHub (opens new window)
首页
  • Java 基础

    • JavaSE
    • JavaIO
    • JavaAPI速查
  • Java 高级

    • JUC
    • JVM
    • Java新特性
    • 设计模式
  • Web 开发

    • Servlet
    • Java网络编程
  • Web 标准

    • HTML
    • CSS
    • JavaScript
  • 前端框架

    • Vue2
    • Vue3
    • Vue3 + TS
    • 微信小程序
    • uni-app
  • 工具与库

    • jQuery
    • Ajax
    • Axios
    • Webpack
    • Vuex
    • WebSocket
    • 第三方登录
  • 后端与语言扩展

    • ES6
    • Typescript
    • node.js
  • Element-UI
  • Apache ECharts
  • 数据结构
  • HTTP协议
  • HTTPS协议
  • 计算机网络
  • Linux常用命令
  • Windows常用命令
  • SQL数据库

    • MySQL
    • MySQL速查
  • NoSQL数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • RabbitMQ
  • 服务器

    • Nginx
  • Spring框架

    • Spring6
    • SpringMVC
    • SpringBoot
    • SpringSecurity
  • SpringCould微服务

    • SpringCloud基础
    • 微服务之DDD架构思想
  • 日常必备

    • 开发常用工具包
    • Hutoll工具包
    • IDEA常用配置
    • 开发笔记
    • 日常记录
    • 项目部署
    • 网站导航
    • 产品学习
    • 英语学习
  • 代码管理

    • Maven
    • Git教程
    • Git小乌龟教程
  • 运维工具

    • Docker
    • Jenkins
    • Kubernetes
  • 算法笔记

    • 算法思想
    • 刷题笔记
  • 面试问题常见

    • 十大经典排序算法
    • 面试常见问题集锦
关于
GitHub (opens new window)
npm

(进入注册为作者充电)

  • 设计模式

    • 设计模式 - 设计思想
    • 设计模式 - 七大原则认识
    • 设计模式 - UML类图
    • 设计模式 - 设计模式概述
      • 1. 掌握设计模式的层次
      • 2. 设计模式介绍
      • 3. 设计模式的重要性
      • 4. 设计模式的目的
      • 5. 设计模式的分类
        • 创建型模式(5 种)
        • 结构型模式(7 种)
        • 行为型模式(11 种)
    • 设计模式 - 创建型单例模式
    • 设计模式 - 创建型工厂模式
    • 设计模式 - 创建型原型模式
    • 设计模式 - 创建型建造者模式
    • 设计模式 - 结构型适配器模式
    • 设计模式 - 结构型桥接模式
    • 设计模式 - 结构型装饰者模式
    • 设计模式 - 结构型组合模式
    • 设计模式 - 结构型外观模式
    • 设计模式 - 结构型享元模式
    • 设计模式 - 结构型代理模式
    • 设计模式 - 行为型模板方法模式
    • 设计模式 - 行为型命令模式
    • 设计模式 - 行为型访问者模式
    • 设计模式 - 行为型迭代器模式
    • 设计模式 - 行为型观察者模式
    • 设计模式 - 行为型中介模式
    • 设计模式 - 行为型备忘录模式
    • 设计模式 - 行为型解释器模式
    • 设计模式 - 行为型状态模式
    • 设计模式 - 行为型策略模式
    • 设计模式 - 行为型职责链模式
    • 设计模式 - 设计模式总结
  • 设计模式
  • 设计模式
scholar
2022-02-26
目录

设计模式 - 设计模式概述

  • 1. 掌握设计模式的层次
  • 2. 设计模式介绍
  • 3. 设计模式的重要性
  • 4. 设计模式的目的
  • 5. 设计模式的分类
    • 创建型模式(5 种)
    • 结构型模式(7 种)
    • 行为型模式(11 种)

# 1. 掌握设计模式的层次

设计模式是软件开发中解决常见问题的通用方法。对于设计模式的掌握,不同层次的开发者有不同的理解与应用:

  1. 第 1 层:初识设计模式

    • 刚开始学编程时,听说过设计模式,但不太清楚如何应用。
  2. 第 2 层:无意识的使用

    • 有一定编程经验,写了很多代码,实际上已经在无意识中应用了设计模式。
  3. 第 3 层:自觉使用设计模式

    • 系统学习了设计模式,能理解它们的应用场景,并在自己的代码中有意识地使用。
  4. 第 4 层:领会设计模式的精妙

    • 在阅读他人源码和大型框架时,能够看出设计模式的巧妙运用,并领会到它带来的设计优势。
  5. 第 5 层:下意识的模式应用

    • 在编写代码时,不需要刻意去思考是否使用设计模式,而是自然而然地将设计模式融入代码中。

# 2. 设计模式介绍

设计模式 是软件开发中为了解决反复出现的问题而总结出的经验和最佳实践。它们不是具体的代码,而是一种解决问题的思路和方法,可以提高代码的 可维护性、可复用性 和 扩展性,降低代码的复杂度。

设计模式由 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides (即「四人组」或「GOF」)提出,他们总结了 23 种经典的设计模式。这些设计模式广泛应用于各种编程语言,包括 Java、C++、PHP 等。

设计模式的核心思想是:以最优雅的方式解决常见的软件设计问题,通过设计模式可以改善代码的结构,使代码更易于维护、扩展和测试。

设计模式有助于:

  • 提高代码的复用性,避免代码重复;
  • 通过封装变化点,降低代码的复杂度;
  • 提升系统的可扩展性,便于在不修改已有代码的情况下新增功能。

# 3. 设计模式的重要性

在实际开发过程中,设计模式能够为软件开发提供有效的指导,尤其在系统维护、功能扩展和重构时,设计模式展现出它的价值。

例如:

  • 应对需求变化:当客户需要在项目中增加新功能时,使用合适的设计模式可以轻松扩展现有系统,而不需要大幅修改原有代码。
  • 项目的可维护性:一个良好设计的项目,能够让新开发者更容易理解和接手,特别是当项目的原开发者不再维护项目时。
  • 面试中的常见问题:许多 IT 大厂在招聘时会考察开发者是否在实际项目中使用过设计模式,以及如何选择合适的模式来解决问题。

设计模式在项目开发中的应用,如下图所示,贯穿了从面向对象编程到框架设计的全过程:

设计模式应用

# 4. 设计模式的目的

设计模式的目的是帮助开发者编写出更 高效、可扩展、可维护 的代码。它们通过为常见问题提供通用的解决方案,使代码具有以下特性:

  1. 代码重用性:相同的功能代码可以多次使用,不用重复编写,减少冗余代码。
  2. 可读性:通过规范化的设计方式,使代码更易理解,便于其他开发者阅读和维护。
  3. 可扩展性:在添加新功能时,不需要对原有代码做大的修改,增强系统的可扩展性。
  4. 可靠性:增加新功能后,原有功能保持不变,系统能够继续正常运行。
  5. 灵活性:设计模式可以增强系统的灵活性,便于应对需求的变化。

设计模式的本质是对 面向对象设计原则 的实际运用,主要体现在对类的 封装、继承 和 多态 的应用,以及类之间的关系处理。它不仅提高了代码的设计能力,还提高了开发效率,缩短了项目的开发周期。

同时,设计模式强调:设计要简单而非复杂。在具体的项目中,如果引入设计模式反而增加了代码的复杂性,则说明问题本身可能不需要设计模式的介入。

# 5. 设计模式的分类

设计模式按其用途可以分为三大类:创建型模式、结构型模式 和 行为型模式,共 23 种。

# 创建型模式(5 种)

  • 单例模式(Singleton Pattern):确保某个类只有一个实例,并提供一个全局访问点供外界获取该实例。
  • 工厂方法模式(Factory Method Pattern):定义一个用于创建对象的接口,由子类决定实例化的类。
  • 抽象工厂模式(Abstract Factory Pattern):提供一个接口,创建一系列相关的或相互依赖的对象,而无需指定它们的具体类。
  • 原型模式(Prototype Pattern):通过复制现有对象来创建新对象。
  • 建造者模式(Builder Pattern):将一个复杂对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示。

# 结构型模式(7 种)

  • 适配器模式(Adapter Pattern):将一个类的接口转换为客户希望的另一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作。
  • 桥接模式(Bridge Pattern):将抽象部分与它的实现部分分离,使它们可以独立变化。
  • 装饰模式(Decorator Pattern):动态地给对象添加新的功能,而不改变其结构。
  • 组合模式(Composite Pattern):将对象组合成树形结构,以表示 "部分-整体" 的层次结构。
  • 外观模式(Facade Pattern):为子系统中的一组接口提供一个一致的接口,使得子系统更容易使用。
  • 享元模式(Flyweight Pattern):运用共享技术有效地支持大量细粒度对象的复用。
  • 代理模式(Proxy Pattern):为其他对象提供一种代理以控制对该对象的访问。

# 行为型模式(11 种)

  • 模板方法模式(Template Method Pattern):定义一个算法的骨架,将一些步骤延迟到子类中,使得子类可以不改变算法结构的情况下重新定义某些步骤。
  • 命令模式(Command Pattern):将一个请求封装为一个对象,从而允许客户端通过不同的请求来参数化对象。
  • 访问者模式(Visitor Pattern):表示一个作用于某对象结构中的各元素的操作,使得可以在不改变对象结构的前提下定义作用于这些元素的新操作。
  • 迭代器模式(Iterator Pattern):提供一种方法访问一个聚合对象中的各个元素,而不需要暴露该对象的内部表示。
  • 观察者模式(Observer Pattern):定义对象间的一种一对多的依赖关系,当一个对象的状态发生变化时,所有依赖于它的对象都会得到通知并自动更新。
  • 中介者模式(Mediator Pattern):定义一个中介对象来封装一系列对象的交互,从而使对象不需要相互显式引用,减少对象之间的耦合。
  • 备忘录模式(Memento Pattern):在不破坏封装的前提下,捕获对象的内部状态,并在该对象之外保存这个状态。
  • 解释器模式(Interpreter Pattern):为语言的语法和语义定义一个表示,并提供一个解释器来处理这些语法和语义。
  • 状态模式(State Pattern):允许对象在其内部状态发生改变时改变它的行为。
  • 策略模式(Strategy Pattern):定义一系列算法,并将它们封装起来,使得它们可以互相替换。
  • 职责链模式(Chain of Responsibility Pattern):将请求的发送者和接收者解耦,使多个对象都有机会处理这个请求。

总结

通过正确地运用设计模式,软件开发者可以有效提高系统的灵活性、可扩展性和可维护性。在开发过程中,设计模式不仅能帮助开发者应对常见的设计问题,还能让代码更加优雅和规范。在掌握设计模式时,既要关注模式本身的使用场景和原则,也要注重避免过度设计,使设计模式成为简化问题的工具,而不是复杂化设计的负担。

编辑此页 (opens new window)
上次更新: 2024/12/28, 18:32:08
设计模式 - UML类图
设计模式 - 创建型单例模式

← 设计模式 - UML类图 设计模式 - 创建型单例模式→

Theme by Vdoing | Copyright © 2019-2025 程序员scholar
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式