设计模式概述

文章目录

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

设计模式概述

设计模式是什么?

设计模式的一般定义为:

设计模式(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)定义了一个算法的骨架,将一些步骤的具体实现延迟到子类中

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

解决ubuntu文件系统变成只读的方法

所欲文件变成只读,这种情况一般是程序执行发生错误,磁盘的一种保护措施 使用fsck修复 方法一: # 切换root sudo su # 修复磁盘错误 fsck -t ext4 -v /dev/sdb6 方法二: fsck.ext4 -y /dev/sdb6 重新用读写挂载 上面两种方法&…

kubernetes/k8s驱逐机制总结篇

概述 k8s的驱逐机制是指在某些场景下,如node节点notReady、node节点压力较大等,将pod从某个node节点驱逐掉,让pod的上层控制器重新创建出新的pod来重新调度到其他node节点。这里也将kube-scheduler的抢占调度纳入到了驱逐的讨论范围内&#…

用MFC打开外部程序

在MFC(Microsoft Foundation Classes)中,你可以使用ShellExecute函数来打开Notepad并加载指定的文件。ShellExecute函数是Windows API的一部分,它可以执行与操作系统相关的操作,例如打开文件、运行程序等。 以下是在M…

性能评估之旅:软件测试的神秘工具与方法论

引言:性能评估的重要性 在当今的软件开发领域,性能评估已经成为了一个不可或缺的环节。随着用户对于软件响应速度和稳定性的要求越来越高,如何确保软件在各种环境下都能稳定运行,成为了每一个开发者和测试者必须面对的问题。性能…

爬虫:绕过5秒盾Cloudflare和DDoS-GUARD

本文章仅供技术研究参考&#xff0c;勿做它用&#xff01; 5秒盾的特点 <title>Just a moment...</title> 返回的页面中不是目标数据&#xff0c;而是包含上面的代码&#xff1a;Just a moment... 或者第一次打开网页的时候&#xff1a; 这几个特征就是被Cloud…

linux系统硬盘备份

查看硬盘信息 输入命令&#xff1a; lsblk 可以看到下图的服务器存在一个硬盘sda &#xff0c;容量为40g 备份硬盘 备份 dd if/dev/sda of~/disk1.img 备份并压缩 dd if/dev/sda | gzip > disk.img.gz 还原硬盘 如果压缩过的镜像需要先解压 还原 dd ifdisk1.img …

SQL 错误 [22007]: ERROR: invalid input syntax for type date: ““

0. 背景 PG数据库一张表有这样一个varchar类型的字段end_date,存储的值是格式化后的年月日日期如 2024-08-10 现在我需要根据当前日期与end_date的差值作为where条件过滤,我的写法 select …… from my_table_name where current_date - cast (end_date as date) >100报错…

Redis 10 大数据类型

1. which 10 1. redis字符串 2. redis 列表 3. redis哈希表 4. redis集合 5. redis有序集合 6. redis地理空间 7. redis基数统计 8. redis位图 9. redis位域 10. redis流 2. 获取redis常见操作指令 官网英文&#xff1a;https://redis.io/commands 官网中文&#xff1a;https:/…

Fastadmin框架 聚合数字生活抵扣卡系统v2.8.6

【2.8.6更新公告】 1.【优化】优化已知问题。 2.【新增 】新增区县影院。

[ES]安装es、kibana、ik分词器

一、安装es和kibana 1、创建一个网络&#xff0c;网络内的框架(eskibana)互联 docker network create es-net 2、下载es和kibana docker pull elasticsearch:7.12.1 docker pull kibana:7.12.1 3、运行docker命令部署单点eskibana&#xff08;用来操作es&#xff09; doc…

MySQL中的free链表,flush链表,LRU链表

一、free链表 1、概述 free链表是一个双向链表数据结构&#xff0c;这个free链表里&#xff0c;每个节点就是一个空闲的缓存页的描述数据块的地址&#xff0c;也就是说&#xff0c;只要你一个缓存页是空闲的&#xff0c;那么他的描述数据块就会被放入这个free链表中。 刚开始数…

Pytest和Unittest测试框架的区别?

如何区分这两者&#xff0c;很简单unittest作为官方的测试框架&#xff0c;在测试方面更加基础&#xff0c;并且可以再次基础上进行二次开发&#xff0c;同时在用法上格式会更加复杂&#xff1b;而pytest框架作为第三方框架&#xff0c;方便的地方就在于使用更加灵活&#xff0…

6. 激活层

6.1 非线性激活 ① inplace为原地替换&#xff0c;若为True&#xff0c;则变量的值被替换。若为False&#xff0c;则会创建一个新变量&#xff0c;将函数处理后的值赋值给新变量&#xff0c;原始变量的值没有修改。 import torch from torch import nn from torch.nn import …

2.神经网络的实现

创建神经网络类 import numpy # scipy.special包含S函数expit(x) import scipy.special # 打包模块 import pickle# 激活函数 def activation_func(x):return scipy.special.expit(x)# 用于创建、 训练和查询3层神经网络 class neuralNetwork:# 初始化神经网络def __init__(se…

十二、pikachu之URL重定向

文章目录 1、URL重定向概述2、实战3、URL跳转的几种方式:3.1 META标签内跳转3.2 javascript跳转3.3 header头跳转 1、URL重定向概述 不安全的url跳转问题可能发生在一切执行了url地址跳转的地方。如果后端采用了前端传进来的&#xff08;可能是用户传参&#xff0c;或者之前预埋…

学习JAVA打卡第四十四天

Scanner类 ⑴Scanner对象 scanner对象可以解析字符序列中的单词。 例如&#xff1a;对于string对象NBA 为了解析出NBA的字符序列中的单词&#xff0c;可以如下构造一个scanner对象。 将正则表达式作为分隔标记&#xff0c;即让scanner对象在解析操作时把与正则表达式匹配的字…

Module not found: Error: Can‘t resolve ‘vue-pdf‘ in ‘xxx‘

使用命令npm run serve时vue项目报错&#xff1a; Module not found: Error: Cant resolve vue-pdf in xxx 解决方案&#xff1a; 运行命令&#xff1a; npm install vue-pdf --save --legacy-peer-deps 即可解决。 再次顺利执行npm run serve

Java --- 异常处理

目录 一、什么是异常 二、异常抛出机制 三、如何对待异常 四、 Java异常体系 4.1、Throwable 4.2、Error 4.2、Exception 4.2.1、编译时异常 4.2.2、运行时期异常 五、异常处理 5.1、捕获异常&#xff08;try-catch&#xff09; 5.1.2、catch中异常处理方式 …

hive问题总结

往往用了很久的函数却只知道其单一的应用场景&#xff0c;本文将不断完善所遇到的好用的hive内置函数。 1.聚合函数或者求最大最小值函数搭配开窗函数使用可以实现滑动窗口 例&#xff1a; collect_list函数&#xff0c;搭配开窗函数&#xff0c;实现了在滑动窗口内对事件路径…

Docker容器:本地私有仓库、harbor私有仓库部署与管理

文章目录 Docker容器&#xff1a;本地私有仓库、harbor私有仓库部署与管理一.本地私有仓库1.本地私有仓库概述2.搭建本地私有仓库3.容器重启策略简介 二.harbor私有仓库部署与管理1.什么是harbor2.Harbor的特性3、Harbor的构成4.Harbor私有仓库架构及数据流向5.harbor部署及配置…