设计模式概述

文章目录

  • 设计模式概述
    • 创建型模式:
    • 结构型模式:
    • 行为型模式:

设计模式概述

设计模式是什么?

设计模式的一般定义为:

设计模式(Design Pattern)是一套反复使用、多人知晓的,经过分类编目的,代码设计总结经验,使用设计模式是为了可重用代码,让代码更容易被他人理解并保证代码可靠性

设计模式一般包含模式名称、问题、目的、解决方案、效果等组成要素,我们一般比较关注的是模式名称(Pattern Name),问题(Problem),解决方案(Solution)和效果(Consequences)

设计模式的本质提高 软件的维护性,通用性和扩展性,并降低软件的复杂度。

根据它们的用途,设计模式可以分为 创建型, 结构型,行为型三种

在这里插入图片描述

创建型模式:

主要提供创建对象的机制,描述如何创建对象

类型(模式名称)要点
单例模式(Singleton Pattern)保证一个类仅有一个实例,并提供一个访问它的点
简单工厂模式(Simple Factory Pattern)比较简单,应用也比较频繁,学习其它工厂模式的入门
工厂方法模式(Factory Method Pattern)定义一个创建对象的接口,让子类决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类执行
抽象工厂模式(Abstract Factory Pattern)提供一个创建一系列相关或者互相依赖对象的接口,无需指定它们具体的类
原形模式(Prototype Pattern)用原形实例指定创建对象的种类,并且通过拷贝这些原形创建新的对象
建造者模式(Builder Pattern)将一个复杂的构建与其表示分离,使同样的构建过程可以创建不同的表示

结构型模式:

如何将类和对象组合,并保持结构的灵活高效

More Actions类型(模式名称)要点
适配器模式(Adapter Pattern)一个类的接口转换为另一个接口,使不兼容的类可以一起工作
桥接模式(Bridge Pattern)抽象部分和现实部分分离
组合模式(Composite Pattern)对象组合为树形结构来表示部分-整体的层次结构
装饰模式(Decorator Pattern)动态给一个对象添加额外的职责
外观模式(Façade Pattern)定义一个高层接口,为子系统一组接口提供一个一致的界面
享元模式(Flyweight Pattern)共享,支持大量细粒度对象
代理模式(Proxy Pattern)给其他对象提供一种代理来控制对这个对象的访问

行为型模式:

对象之间的交互和职责划分委派

类型(模式名称)要点
责任链模式(Chain of Responsibility Pattern)多个对象连接成一条链,沿着链传递请求直到有对象处理
命令模式(Command Pattern)一个请求封装为一个对象,用不同的请求对客户进行参数化
迭代器模式(Iterator Pattern)提供一种方法访问顺序,访问一个聚合对象中各种元素但不暴露对象内部
中介者模式(Mediator Pattern)用一个中介对象封装一系列对象交互
备忘录模式(Memento Pattern)不破话封装的前提下,捕获一个对象的内部状态,并在对象外保存这个状态
观察者模式(Observer Pattern)定义对象间的一种一对多的依赖关系,一个对象状态改变时,所有依赖它的对象都得到通知并自动更新
状态模式(State Pattern)允许对象在内部状态发生改变时改变它的行为
访问者模式(Visitor Pattern)数据结构与数据操作分离
解释器模式(Interpreter Pattern)该模式用于定义一个语言的文法规则,并提供一个解释器来解释语言中的表达式。
策略模式(Strategy Pattern)允许在运行时选择算法或策略,从一组可互换的策略中选择一个来完成特定任务。
模板模式(Template Pattern)定义了一个算法的骨架,将一些步骤的具体实现延迟到子类中

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/54101.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机器学习在大数据分析中的应用

文章目录 机器学习在大数据分析中的原理机器学习在大数据分析中的应用示例预测销售趋势客户细分和个性化营销 机器学习在大数据分析中的前景和挑战前景挑战 总结 🎉欢迎来到AIGC人工智能专栏~探索机器学习在大数据分析中的应用 ☆* o(≧▽≦)o *☆嗨~我是IT陈寒&…

Kubernetes(K8S)简介

Kubernetes (K8S) 是什么 它是一个为 容器化 应用提供集群部署和管理的开源工具,由 Google 开发。Kubernetes 这个名字源于希腊语,意为“舵手”或“飞行员”。k8s 这个缩写是因为 k 和 s 之间有八个字符的关系。 Google 在 2014 年开源了 Kubernetes 项…

AUTOSAR规范与ECU软件开发(实践篇)6.3 CAN通信协议栈概念与配置方法介绍

目录 1 、CAN通信协议栈概念 2、 CAN通信协议栈配置方法 (1) EcuC模块 (2) Com模块

【Unity小技巧】unity2d平台制作一根三七调的鱼竿效果(附git源码)

文章目录 前言素材开始源码参考完结 前言 今天我们做一个2d鱼竿的效果,先看一下效果成品效果 素材 鱼竿 开始 首先创建一个2D URP项目 ,创建一个空物体作为鱼竿,并创建两个子物体作为开始和结束点 配置层级如下 鱼竿和鱼线加Line Ren…

windows一键启动jupyter

windows一键启动jupyter jupyter简介 Jupyter是一个开源的交互式计算环境,主要用于数据分析、数据可视化和科学计算。它的名字来源于三种编程语言的缩写:Julia、Python和R,这三种语言都可以在Jupyter环境中运行。如果您想进行数据分析、科学…

为什么网络互联地址设置为30位地址

对于点对点链路,为了节约IPv4地址,一般为其分配/30地址块,这样包含4个地址:最小地址作为网络地址,最大地址作为广播地址,剩余两个可分配地址,分配给链路两端的接口,这是最普遍的方法…

大语言模型之六- LLM之企业私有化部署

数据安全是每个公司不得不慎重对待的,为了提高生产力,降本增效又不得不接受新技术带来的工具,私有化部署对于公司还是非常有吸引力的。大语言模型这一工具结合公司的数据可以大大提高公司生产率。 私有化LLM需要处理的问题 企业内私有化LLM…

【Axure原型分享】能统计中英文字数的多行输入框

今天和大家分享能统计中英文字数的多行输入框的原型模板,在输入框里输入内容后,能够动态根据输入框的内容,统计出字符数量,包括总字数、中文字数、英文字数、数字字数、其他标点符号的字数,具体效果可以观看下方视频或…

系统架构设计高级技能 · 安全架构设计理论与实践

系列文章目录 系统架构设计高级技能 软件架构概念、架构风格、ABSD、架构复用、DSSA(一)【系统架构设计师】 系统架构设计高级技能 系统质量属性与架构评估(二)【系统架构设计师】 系统架构设计高级技能 软件可靠性分析与设计…

深入理解高并发编程 - Thread 类的 stop () 和 interrupt ()

stop() stop() 方法被用于停止线程。然而,需要注意的是,stop() 方法已经被标记为已废弃(deprecated),并且不推荐使用。这是因为使用该方法可能导致不可预料的问题和数据不一致性,因此它被认为是不安全的。…

Spring MVC 二 :基于xml配置

创建一个基于xml配置的Spring MVC项目。 Idea创建新项目&#xff0c;pom文件引入依赖&#xff1a; <dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.2.12.RELEASE</version>…

【C++】AVL树(高度平衡二叉树)

AVL树 概念AVL树节点定义AVL树节点插入AVL树四种旋转情况左单旋右单旋先左单旋再右单旋先右单旋后左单旋 元素的插入及控制平衡判断最后节点是否平衡 概念 二叉搜索树虽然可以缩短查找的效率&#xff0c;但如果数据有序或者接近有序二叉搜索树将退化为单支树&#xff0c;查找元…

R语言中<- 的含义

一般语言的赋值是 号&#xff0c;但是 R 语言是数学语言&#xff0c;所以赋值符号与我们数学书上的伪代码很相似&#xff0c;是一个左箭头 <- &#xff1a; 举个例子&#xff1a; a <- 12 b <- 45 print(a b) 以上代码执行结果&#xff1a;57 这个赋值符号是 R …

copy is all you need前向绘图 和疑惑标记

疑惑的起因 简化前向图 GPT4解释 这段代码实现了一个神经网络模型&#xff0c;包含了BERT、GPT-2和MLP等模块。主要功能是给定一个文本序列和一个查询序列&#xff0c;预测查询序列中的起始和结束位置&#xff0c;使其对应文本序列中的一个短语。具体实现细节如下&#xff1a…

Win系统设置开机自启项及自定义自启程序

Win系统设置开机自启项及自定义自启程序 分用户自启动和系统自启动两种形式&#xff1a; 1. 用户自启动目录&#xff1a;C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup 用快速键打开&#xff1a; Win键R键&#xff0c;输入shell:…

JavaScript 基础知识回顾与复习---闭包

当我们说到闭包&#xff0c;在JavaScript中闭包是一个让人难以理解甚至说是一个近乎神话的概念。闭包往往也是面试必考的题目&#xff0c;如果能够掌握闭包对我们自己来说那也是一种极大的提升。在学习的过程中不要害怕闭包&#xff0c;闭包并不是一个新的语法或者模式&#xf…

sql server 快速安装

目录标题 一、下载二、直接选择基本安装二、下载ssms&#xff08;数据库图形化操作页面&#xff09;三、开启sa账号认证&#xff08;一&#xff09;第一步&#xff1a;更改身份验证模式&#xff08;二&#xff09;第二步&#xff1a;启用 sa 登录四、开启tcp/ip 一、下载 下载…

低通滤波器和高通滤波器

应用于图像低通滤波器和高通滤波器的实现 需要用到傅里叶变换 #include <opencv2/opencv.hpp> #include <Eigen> #include <iostream> #include <vector> #include <cmath> #include <complex>#define M_PI 3.14159265358979323846…

QT5.12.12通过ODBC连接到GBase 8s数据库(CentOS)

本示例使用的环境如下&#xff1a; 硬件平台&#xff1a;x86_64&#xff08;amd64&#xff09;操作系统&#xff1a;CentOS 7.8 2003数据库版本&#xff08;含CSDK&#xff09;&#xff1a;GBase 8s V8.8 3.0.0_1 为什么使用QT 5.12.10&#xff1f;该版本包含QODBC。 1&#…

ES6中promise的使用

ES6中promise的使用 本文目录 ES6中promise的使用基础介绍箭头函数function函数状态 原型方法Promise.prototype.then()Promise.prototype.catch() 静态方法Promise.all()Promise.race()Promise.any() 链式回调 基础介绍 官网&#xff1a;https://promisesaplus.com/ window.…