创建模式、结构模式及行为模式

news2025/1/19 1:49:38

谁在什么地方提供什么功能?

要设计几个类?这些类各个是什么功能?相互间的关系是什么?

创建模式指的是对象那么多,怎么把它"生"出来?生几个?从这个角度上来说数组就是一种另类的创建模式。主要着眼于如何重用已有的代码和设计可重用的代码!

结构模式指的是应该定义多少个对象,多少个类,类和对象间要如何组织。比如说全局变量,我们可以以基本数据类型的形式定义,另一种就是将其按照一定的标准进行分类,定义"结构"。主要着眼与如何扩充代码!

行为模式指业务如何处理,先干什么,再干什么。但这部分内容和结构显然是密切相关的:同样是买房子,找中介和不找中介完全是两个流程。行为模式重点是解决代码中if-else过多的问题。这可能是最复杂的内容。主要着眼于如何减低代码间的耦合和代码结构的复杂性。

5种创建模式,7种结构模式,11种行为模式

设计软件就像写文章,架构是谋篇布局,设计模式是段落(章节)安排,习惯法是遣词造句!

他人的解释

  • Creational patterns provide object creation mechanisms that increase flexibility and reuse of existing code.

  • Structural patterns explain how to assemble objects and classes into larger structures, while keeping these structures flexible and efficient.

  • Behavioral patterns take care of effective communication and the assignment of responsibilities between objects.

从另外一个角度思考:---C语言

什么类不类的,对象不对象的,一直到最底层!

创建模式是关于如何创建变量的,结构模式是关于定义如何扩展变量和函数以获得更大的变量和函数,行为模式是关于定义函数。

实现这些模式要实现适当的结构和函数,但是总体来看这些代价是值得的,提升了系统的柔性和效率(flexible &efficient)。

1.创建模式:--主要解决变量定义问题

比如要处理学生的信息,如成绩语数外,我们可以定义3个变量,一行即可。如果要处理1万个学生的信息,不仅是语数外,还有其他信息,如姓名、性别、学校等,当然还有姓名,那每个学生有7个数据项,1万个学生要定义7万个变量,这时候按简单变量的方式定义的话就把自己搞死了,可以将学生的信息定义一个结构,然后定义一个有1万个元素的数组,这也是一种创建模式。

变量的定义包括2个内容:命名及初始化。

  • 工厂模式用于生成一类变量;
  • 抽象工厂模式可以生成多类变量;
  • 建造者模式可以生成复杂变量,涉及大量参数:将初始化过程分成多个步骤;
  • 原型模式用于批量生成一批对象(游戏中的小兵,炮灰都类似):生成一个,复制、拷贝,修改;
  • 单例模式确保只生成一个对象:用静态变量。

2.结构模式:---主要解决函数及变量的定义问题--》如何在减少不必要的定义同时,保持效率和灵活性。

  • 适配器模式:加了一个中间层(适配器),别人变了我可以不变,我变了,别人可以不变
  • 桥接模式:变与不变分开,比如红色铅笔,蓝色钢笔,黑色毛笔等等,不如只定义笔和颜色,然后进行组合;
  • 组合模式:处理树型结构,节点和叶子是不同的,但是可以看做一样来处理,形式简洁
  • 装饰器模式:俄罗斯套娃
  • 享元模式:精兵简政,共用;像组织中的司机,原来每位高管有一位对应的司机,现在几位高管用一个司机;类似的还有将重复的代码组织成函数,其他各处调用即可
  • 代理模式:都经过它处理,其余你就不管了;
  • 外观模式:为程序库、框架或其他数据或函数等提供一个简单的接口。都经过它转交,它自己不处理交给别人处理,内部的复杂关系我不管;有点像每个单位的门房的作用,原来外部人员办事乱糟糟,现在把材料交给门房即可,过段时间来找他问结果。与代理模式不同的是外观模式自己对数据是不处理的,它转交给别人

3.行为模式:--解决函数问题--》重组数据处理流程、简化函数结构,减少if-else结构;简化调用关系。

  • 中介者模式:多对多的关系转变为多对一的关系,类似于多个医院与多个医药公司采购药物,转变为医药集采。
  • 访问者模式:根据数据不同采用不同的处理方式。
  • 观察者模式:多对一的关系变为一对多的关系。事件订阅。每家每户到邮局取信(多对一)变化邮局将信投递到每家每户(一对多)
  • 责任链模式:有专门的链条记录每个处理环节。首问负责制,且确保问题一定会有人处理的
  • 模板模式:流程固定,每个环节可以变化
  • 备忘录模式:有专门的结构用来记录状态的,以便回溯
  • 状态模式:状态的处理和状态的转换结合。有状态和状态机,状态机负责执行,状态负责处理机状态的转换,非常常用和典型
  • 解释器模式:提炼了一个解释器,对不同的文本处理,先有解释器处理后再根据解释的结构进行处理;类似与高级语言处理过程
  • 迭代器模式:提供一个迭代器,将非线性的结构变为线性的,每一项处理有自己的前序和后继
  • 命令模式:将命令打包,存入队列。命令和处理相分离。
  • 策略模式:将数据与数据的处理分离,数据可以相同,但是处理的方法策略不同。
创建模式单例模式(Singleton)独一无二,全局唯一

如何创建变量

--如何创建对象?

抽象工厂(Abstract  Factory )产品族,创建系列
原型模式(Prototype)复制粘贴,一模一样
工厂模式(Factory)创建产品,子类定制
建造者模式(Builder)一步一步,构建复杂
结构模式组合模式(Composite)树状结构,递归遍历

如何组织数据及函数

函数和数据如何变大而不失灵活性(底层越巩固上层越灵活)?

负责如何将对象和类组装成较大的结构?

如何尽量定义越少的数据结构和函数而不失灵活性?

数据组织
享元模式(Flyweight)共享对象,节省内存

个人信息记录,省份信息可以用1~34

数据组织

桥接模式(Brideg)抽象和实现,解耦合
2个维度变化
数据和函数
适配器模式(Adapter)接口不同,转换器
左右对不上
代理模式(Proxy)控制访问,增加安全
代理服务器?
外观模式(Facade)统一接口,简化调用
Linux中的VFS?
装饰器模式(Decorator)包装对象,增强功能
B包含A,C包含A,D包含B,...
数据和函数
行为模式中介者模式(Mdiator)统一协调,对象解耦

如何处理数据(如何定义函数)

--对象间如何高效沟通和职责委派

从多对多变为多对一
观察者模式(Observer)一对多,消息通知
产生消息的函数启动接收消息的函数,接受消息的函数才处理
访问者模式(Visitor)操作对象,分离算法
责任链模式(Chain of Resonsibility)链式处理,一环接一环
模板模式(Template)抽象父类,子类实现
流程一致,每步不同
备忘录模式(Memento)状态保持回复原状
状态模式(State)状态切换,行为变化
行为处理与行为变化封装一起
解释器模式(interpreter)识别文法,构建解释

迭代器模式(Iterator)遍历集合,无需暴露
命令模式(Command)请求封装解耦合
策略模式(Stategy)算法替代,灵活变化

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

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

相关文章

SpringBoot链接Kafka

一、SpringBoot生产者 (1)修改SpringBoot核心配置文件application.propeties, 添加生产者相关信息 # 连接 Kafka 集群 spring.kafka.bootstrap-servers192.168.134.47:9093# SASL_PLAINTEXT 和 SCRAM-SHA-512 认证配置 spring.kafka.properties.securi…

Linux下源码编译安装Nginx1.24及服务脚本实战

1、下载Nginx [rootlocalhost ~]# wget -c https://nginx.org/download/nginx-1.24.0.tar.gz2、解压 [rootlocalhost ~]# tar xf nginx-1.24.0.tar.gz -C /usr/local/src/3、安装依赖 [rootlocalhost ~]# yum install gcc gcc-c make pcre-devel openssl-devel -y4、 准备 N…

解答二重积分

什么是积分? 一元函数的积分。具体计算过程,是将无数个小矩形加起来,然后求极限。 而今天我们要讲的积分,是二元函数的积分。我们可以用曲顶柱体的体积来理解。 什么是曲顶柱体? 它的底是xoy平面上的一个闭区域。顶是…

代理模式实现

一、概念:代理模式属于结构型设计模式。客户端不能直接访问一个对象,可以通过代理的第三者来间接访问该对象,代理对象控制着对于原对象的访问,并允许在客户端访问对象的前后进行一些扩展和处理;这种设置模式称为代理模…

回归预测 | MATLAB实TCN时间卷积神经网络多输入单输出回归预测

效果一览 基本介绍 回归预测 | MATLAB实TCN时间卷积神经网络多输入单输出回归预测 …………训练集误差指标………… 1.均方差(MSE):166116.6814 2.根均方差(RMSE):407.5741 3.平均绝对误差(MAE):302.5888 4.平均相对…

《目标检测数据集下载地址》

一、引言 在计算机视觉的广袤领域中,目标检测宛如一颗璀璨的明星,占据着举足轻重的地位。它宛如赋予计算机一双锐利的 “眼睛”,使其能够精准识别图像或视频中的各类目标,并确定其位置,以边界框的形式清晰呈现。这项技…

Android系统定制APP开发_如何对应用进行系统签名

前言 当项目开发需要使用系统级别权限或frame层某些api时,普通应用是无法使用的,需要在AndroidManifest中配置sharedUserId: AndroidManifest.xml中的android:sharedUserId“android.uid.system”,代表的意思是和系统相同的uid&a…

【NextJS】PostgreSQL 遇上 Prisma ORM

NextJS 数据库 之 遇上Prisma ORM 前言一、环境要求二、概念介绍1、Prisma Schema Language(PSL) 结构描述语言1.1 概念1.2 组成1.2.1 Data Source 数据源1.2.2 Generators 生成器1.2.3 Data Model Definition 数据模型定义字段(数据)类型和约束关系&…

Mybatis 进阶 / Mybatis—Puls (详细)

目录 一.动态SQL 1.1标签 1.2 标签 1.3标签 1.4标签 1.5标签 1.6标签 mybatis总结: 二.Mybatis-Puls 2.1准备工作 2.2CRUD单元测试 2.2.1创建UserInfo实体类 2.2.2编写Mapper接⼝类 2.2.3 测试类 2.3 常见注解 2.3.1TableName 2.3.2TableField 2.4打印日…

Java工具包:高效开发的魔法钥匙

目录 一、引言 二、Hutool 工具包初体验 2.1 快速入门 2.2 常用工具类及方法详解 2.2.1 Convert 类型转换工具类 2.2.2 DateUtil 日期时间工具类 2.2.3 StrUtil 字符串工具类 2.2.4 其他常用工具类 三、其他 Java 常用工具包巡礼 3.1 Apache Commons 系列 3.2 Google…

Formality:参考设计/实现设计以及顶层设计

相关阅读 Formalityhttps://blog.csdn.net/weixin_45791458/category_12841971.html?spm1001.2014.3001.5482​​​ Formality存在两个重要的概念:参考设计/实现设计和顶层设计,本文就将对此进行详细阐述。参考设计/实现设计是中两个重要的全局概念&am…

HBase实训:纸币冠字号查询任务

一、实验目的 1. 理解分布式数据存储系统HBase的架构和工作原理。 2. 掌握HBase表的设计原则,能够根据实际业务需求设计合理的表结构。 3. 学习使用HBase Java API进行数据的插入、查询和管理。 4. 实践分布式数据存储系统在大数据环境下的应用,…

C#轻松实现条形码二维码生成及识别

一、前言 大家好!我是付工。 今天给大家分享一下,如何基于C#来生成并识别条形码或者二维码。 二、ZXing.Net 实现二维码生成的库有很多,我们这里采用的是http://ZXing.Net。 ZXing是一个开放源码的,用Java实现的多种格式的一…

重拾Python学习,先从把python删除开始。。。

自己折腾就是不行啊,屡战屡败,最近终于找到前辈教我 第一步 删除Python 先把前阵子折腾的WSL和VScode删掉。还是得用spyder,跟matlab最像,也最容易入手。 从VScode上搞python,最后安装到appdata上,安装插…

ASP.NET Core - 依赖注入(三)

ASP.NET Core - 依赖注入(三) 4. 容器中的服务创建与释放 4. 容器中的服务创建与释放 我们使用了 IoC 容器之后,服务实例的创建和销毁的工作就交给了容器去处理,前面也讲到了服务的生命周期,那三种生命周期中对象的创…

高通8255 Android STR 启动失败要因分析调查

目录 背景: 调查过程: 步骤1: slog2info | grep vmm_service 步骤2: slog2info | grep qvm 总结: 解决方案 背景: 调试高通8255 STR的STR过程中发现Android和QNX进入STR状态后,脱出STR时…

Linux操作命令之云计算基础命令

一、图形化界面/文本模式 ctrlaltF2-6 图形切换到文本 ctrlalt 鼠标跳出虚拟机 ctrlaltF1 文本切换到图形 shift ctrl "" 扩大 ctrl "-" 缩小 shift ctrl "n" 新终端 shift ctrl "t" 新标签 alt 1,…

LabVIEW桥接传感器配置与数据采集

该LabVIEW程序主要用于配置桥接传感器并进行数据采集,涉及电压激励、桥接电阻、采样设置及错误处理。第一个VI("Auto Cleanup")用于自动清理资源,建议保留以确保系统稳定运行。 以下是对图像中各个组件的详细解释&#…

面试题解析

1、写一个sed命令,修改/tmp/input.txt文件的内容 要求: 删除所有空行; 在非空行前面加一个"AAA",在行尾加一个"BBB",即将内容为11111的一行改为:AAA11111BBB 创造测试文件:…

合合信息名片全能王上架原生鸿蒙应用市场,成为首批数字名片类应用

长期以来,名片都是企业商务沟通的重要工具。随着企业数字化转型,相较于传统的纸质名片,数字名片对于企业成员拓展业务、获取商机、提升企业形象等方面发挥着重要作用。近期,合合信息旗下名片全能王正式上线原生鸿蒙应用市场&#…