当前位置: 首页 > news >正文

1、设计模式概述

1.1 什么是设计模式

        软件设计模式(Software Design Patter),又称设计模式,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。它描述了在软件设计过程中的一些不断重复发生的问题,以及该问题的解决方案。

        也就是说,它是解决特定问题的一系列套路,是前辈们的代码设计经验的总结,具有一定的普遍性,可以反复使用。

1.2 设计模式的目的

        编写软件过程中,程序员面临着来自耦合性,内聚性以及可维护性,可扩展性,重用性,灵活性等多方面的挑战,设计模式是为了让程序(软件),具有更好的:

  1. 代码重用性(即:相同功能的代码,不用多次编写)
  2. 可读性(即:编程规范性,便于其他程序员的阅读和理解)
  3. 可扩展性(即:当需要增加新的功能时,非常的方便,称为可维护)
  4. 可靠性(即:当我们增加新的功能后,对原来的功能没有影响)
  5. 使程序呈现高内聚,低耦合的特性

1.3 为什么要学习设计模式

  1. 告别“烂代码”,写出更优雅的代码
  2. 为读源码和学框架打好基础
  3. 更好的为代码实现解耦合,达到高内聚低耦合效果
  4. ......

1.4 设计模式的分类

  1. 创建型模式:用于描述“怎样创建对象”,它的主要特点是“将对象的创建与使用分离”。GoF(四人组)书中提供了单例、原型、工厂方法、抽象工厂、建造者等 5 种创建型模式。
  2. 结构型模式:用于描述如何将类或对象按某种布局组成更大的结构,GoF(四人组)书中提供了代理、适配器、桥接、装饰、外观、享元、组合等 7 种结构型模式。
  3. 行为型模式:用于描述类或对象之间怎样相互协作共同完成单个对象无法单独完成的任务,以及怎样分配职责。GoF(四人组)书中提供了模板方法、策略、命令、职责链、状态、观察者、中介者、迭代器、访问者、备忘录、解释器等 11 种行为型模式。

相关文章:

  • 项目内置Express服务器解决Axios发送POST请求mock数据报404错误问题[Vue.js项目实践: 新冠自检系统]
  • Pytorch搭建自定义神经网络
  • Python数据分析——基础数据结构
  • TestNG-常用注解介绍
  • STM32时钟系统和TIMER配置(溢出中断/PWM)实例
  • 随想录一刷Day04——链表
  • 【javaweb简单教程】2.JSP实现数据传递和保存(含四大作用域及简单示例)
  • 7.ROS2笔记-节点
  • 【C++】类和对象(下篇)(万字)
  • 【牛客 - 剑指offer】JZ67 把字符串转换成整数 Java实现
  • python采集火热弹幕数据并做词云图可视化分析
  • 【小程序从0到1】模版与配置|数据绑定|事件绑定
  • NetSuite SuiteQL Query Tool
  • 功能异常强大,推荐这款 Python 时序异常检测神器
  • 串的存储结构 --王道
  • 2018以太坊智能合约编程语言solidity的最佳IDEs
  • chrome扩展demo1-小时钟
  • django开发-定时任务的使用
  • ES学习笔记(10)--ES6中的函数和数组补漏
  • FineReport中如何实现自动滚屏效果
  • HomeBrew常规使用教程
  • iOS仿今日头条、壁纸应用、筛选分类、三方微博、颜色填充等源码
  • JS变量作用域
  • maven工程打包jar以及java jar命令的classpath使用
  • miaov-React 最佳入门
  • MYSQL 的 IF 函数
  • NLPIR语义挖掘平台推动行业大数据应用服务
  • SpringBoot几种定时任务的实现方式
  • 分享一个自己写的基于canvas的原生js图片爆炸插件
  • 极限编程 (Extreme Programming) - 发布计划 (Release Planning)
  • 记一次和乔布斯合作最难忘的经历
  • 腾讯大梁:DevOps最后一棒,有效构建海量运营的持续反馈能力
  • 腾讯视频格式如何转换成mp4 将下载的qlv文件转换成mp4的方法
  • 腾讯优测优分享 | Android碎片化问题小结——关于闪光灯的那些事儿
  • 微信小程序填坑清单
  • 移动端 h5开发相关内容总结(三)
  • 原生Ajax
  • 远离DoS攻击 Windows Server 2016发布DNS政策
  • 正则与JS中的正则
  • 资深实践篇 | 基于Kubernetes 1.61的Kubernetes Scheduler 调度详解 ...
  • #pragam once 和 #ifndef 预编译头
  • $ git push -u origin master 推送到远程库出错
  • (8)Linux使用C语言读取proc/stat等cpu使用数据
  • (LeetCode 49)Anagrams
  • (第8天)保姆级 PL/SQL Developer 安装与配置
  • (附源码)ssm高校升本考试管理系统 毕业设计 201631
  • (附源码)ssm捐赠救助系统 毕业设计 060945
  • (四)Tiki-taka算法(TTA)求解无人机三维路径规划研究(MATLAB)
  • (淘宝无限适配)手机端rem布局详解(转载非原创)
  • (译) 函数式 JS #1:简介
  • (转载)在C#用WM_COPYDATA消息来实现两个进程之间传递数据
  • .NET Framework 3.5中序列化成JSON数据及JSON数据的反序列化,以及jQuery的调用JSON
  • .net 微服务 服务保护 自动重试 Polly
  • .net操作Excel出错解决
  • .Net程序帮助文档制作