设计模式再探——原型模式

news2024/12/26 1:15:56

目录

  • 一、背景介绍
  • 二、思路&方案
  • 三、过程
    • 1.原型模式简介
    • 2.原型模式的类图
    • 3.原型模式代码
    • 4.原型模式深度剖析
    • 5.原型模式与spring
  • 四、总结
  • 五、升华

一、背景介绍

最近在做业务实现的时候,为了通过提升机器来降低开发人员的难度和要求,于是在架构设计上严格按照面向对象去做的。
进而在内存中同一个类处理业务的对象就会很多,为了解决对象复制过程中降低耦合的要求,研究了原型模式。

二、思路&方案

  • 1.原型模式简介
  • 2.原型模式的类图
  • 3.原型模式代码
  • 4.原型模式深度剖析
  • 5.原型模式与spring

三、过程

1.原型模式简介

原型模式(ProtoTYpe),用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。

2.原型模式的类图

在这里插入图片描述

3.原型模式代码

4.原型模式深度剖析

原型模式中的具体原型类concretePrototype1和concretePrototype2有横向纵向两层含义:

  • 4.1.横向,可以是同一个业务的浅复制和深复制
  • 4.2.纵向,可以是不同业务的浅复制或深复制

5.原型模式与spring

  • 5.1.我们都知道如果一个类交给spring进行创建对象,并且创建出来的对象生命周期也交给spring来管理的话,必须强制为单例类;真正使用的时候则通过分时复用进行调用,当我们需要对象并发处理业务的时候我们考虑的事情就会很多。
  • 5.2.如果我们的类交给spring进行创建对象的时候,只需要将单例注解的参数修改为原型,每次从springbean中获取的对象将会是新的对象;而此时获取的新对象生命周期需要我们自己去管理。
  • 5.3.在我们的业务中,例如对于主题讨论中的回复,张三想要按照点赞排序,李四想要按照回复排序;当他们发出请求后,我们就可以通过浅复制方式,使用同一份回复内容,通过不同的对象来分别处理不同的排序结果。

四、总结

  • 1.对于原型模式的边界进行梳理过后,在实际需要的场景中运用就会更加明确
  • 2.原型模式通过统一的clone接口,使得需要复制的业务类强制按照接口规范进行实现从而保证了客户端调用的统一性
  • 3.原型模式在客户端做了父类强转子类的操作,使得生成的对象必须具备子类对应的显示调用的行为(这里也让我想到了接口隔离中的子类强转为父类,使得对象只能显示调用父类的行为)

五、升华

通过对于原型模式的梳理和再探的过程,进一步强化了面向对象中面对抽象编程和面对接口编程这件事;而通过原型模式深浅复制的不同场景的运用使得迪米特法则的落地也更加的彻底。

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

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

相关文章

RabbitMQ - 消息堆积问题的最佳解决方案?惰性队列

目录 一、惰性队列 1.1、消息堆积问题 1.2、消息堆积问题的解决方法 从消费者的角度: 从队列的角度: 1.3、引入惰性队列 1.3.1、什么是惰性队列 1.3.2、惰性队列的使用 1.3.3、效果演示 一、惰性队列 1.1、消息堆积问题 当生产者发送消息的速度…

leetcodeTop100(21) 相交链表

给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。 题目数据 保证 整个链式结构中不存在环。 注意,函数返回结果后,链表必须 保持其原始结构 。 双链表…

1:DDD入门

产品代码都给你看了,可别再说不会DDD(一):DDD入门 # 这是一个讲解DDD落地的文章系列,作者是《实现领域驱动设计》的译者滕云。本文章系列以一个真实的并已成功上线的软件项目——码如云(https://www.mryqr…

【车载开发系列】UDS中Bootloader实现原理

【车载开发系列】UDS中Bootloader实现原理 【车载开发系列】UDS中Bootloader实现原理 【车载开发系列】UDS中Bootloader实现原理一. Bootloader存放位置二. BootLoader的安全机制1)安全访问2)刷新预条件3)完整性校验4)一致性检查5…

NextJS 引入 Ant-Design 样式闪烁问题

按照这里给的样例,抽出关键代码即可 步骤: 安装包: npm i ant-design/static-style-extract引入这俩文件 genAntdCss.tsx: 会帮我们生成 ./public/antd.min.css // src/scripts/genAntdCss.tsximport { extractStyle } from "ant-d…

从锁的类别角度讲,MySQL都有哪些锁

🏆作者简介,黑夜开发者,CSDN领军人物,全栈领域优质创作者✌,CSDN博客专家,阿里云社区专家博主,2023年6月CSDN上海赛道top4。 🏆数年电商行业从业经验,历任核心研发工程师…

2024北京老博会,CBIAIE中国北京国际老年产业博览会

2024第11届中国(北京)国际老年产业博览会,将于4月10-12日盛大举行 2024第11届中国(北京)国际老年产业博览会(CBIAIE北京老博会) The 2024 eleventh China (Beijing) International Aged Indust…

【动手学深度学习-Pytorch版】长短期记忆网络LSTM

LSTM参数说明以及网络架构图 PS:时间仓促,有空补充内容~ LSTM从零开始实现 """ 遗忘门:相当于一个橡皮擦,决定保留昨天的哪些信息 输入门:相当于一个铅笔,再次根据昨天的记忆和今天的输…

【数据结构】list.h 详细使用教程 -- 附带例子代码

目录 一、概述二、详细使用步骤✨2.1 定义结构体包含 struct list_head 成员✨2.2 初始化链表头结点:INIT_LIST_HEAD✨2.3 添加结点:list_add、list_add_tail✨2.4 遍历链表:list_for_each、list_for_each_safe、list_for_each_entry✨2.5 获…

java double类型 向上取整,向下取整,四舍五入

向上取整:Math.ceil(double a) 向下取整:Math.floor(double a) 四舍五入取整:Math.round(double a) 直接取整数:intValue() public static void main(String[] args) {Double number 5.3;Double number1 5.8;//向上取整Doubl…

UE5 虚幻引擎 如何使用构造脚本(Construction Script)? 构造脚本的奥秘!

目录 1 构造脚本(Construction Script)1.1 介绍1.2 案例1:利用样条组件程序化生成树木1.2 案例2:利用样条组件和样条网格体组件程序化生成道路 1 构造脚本(Construction Script) 1.1 介绍 问题&#xff1a…

leetcode top100(20) 搜索二维矩阵 II

编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性: 每行的元素从左到右升序排列。每列的元素从上到下升序排列。 示例 1: 输入:matrix [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,14,17,2…

腾讯mini项目-【指标监控服务重构】2023-08-24

今日已办 Jeager 功能 监控分布式工作流程并排除故障识别性能瓶颈追踪根本原因分析服务依赖关系 部署 部署 Deployment — Jaeger documentation (jaegertracing.io) 支持 clickhouse jaegertracing/jaeger-clickhouse: Jaeger ClickHouse storage plugin implementation …

Java8实战-总结34

Java8实战-总结34 重构、测试和调试使用 Lambda 重构面向对象的设计模式观察者模式责任链模式 重构、测试和调试 使用 Lambda 重构面向对象的设计模式 观察者模式 观察者模式是一种比较常见的方案,某些事件发生时(比如状态转变)&#xff0…

Java之转换流的详细解析

2. 转换流 2.1 字符编码和字符集 字符编码 计算机中储存的信息都是用二进制数表示的,而我们在屏幕上看到的数字、英文、标点符号、汉字等字符是二进制数转换之后的结果。按照某种规则,将字符存储到计算机中,称为编码 。反之,将…

docker容器安装MongoDB数据库

一:MongoDB数据库 1.1 简介 MongoDB是一个开源、高性能、无模式的文档型数据库,当初的设计就是用于简化开发和方便扩展,是NoSQL数据库产品中的一种。是最 像关系型数据库(MySQL)的非关系型数据库。 它支持的数据结构…

封装一个高级查询组件

封装一个高级查询组件 背景一,前端相关代码二,后端相关代码三,呈现效果总结 背景 业务有个按照自定义选择组合查询条件,保存下来每次查询的时候使用的需求。查了一下项目里的代码没有现成的组件可以用,于是封装了一个 …

腾讯mini项目-【指标监控服务重构】2023-08-29

今日已办 Collector 指标聚合 由于没有找到 Prometheus 官方提供的可以聚合指定时间区间内的聚合函数,所以自己对接Prometheus的api来聚合指定容器的cpu_avg、cpu_99th、mem_avg 实现成功后对接小组成员测试完提供的时间序列和相关容器,将数据记录在表格…

相机One Shot标定

1 原理说明 原理部分网上其他文章[1][2]也已经说的比较明白了,这里不再赘述。 2 总体流程 参考论文作者开源的Matlab代码[3]和github上的C代码[4]进行说明(不得不说还是Matlab代码更优雅) 论文方法总体分两部,第一部是在画面中找…

李宏毅hw-9:Explainable ML

——欲速则不达,我已经很幸运了,只要珍惜这份幸运就好了,不必患得患失,慢慢来。 ----查漏补缺: 1.关于这个os.listdir的使用 2.从‘num_文件名.jpg’中提取出数值: 3.slic图像分割标记函数的作用&#xf…