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

目录

  • 一、背景介绍
  • 二、思路&方案
  • 三、过程
    • 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.rhkb.cn/news/140647.html

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

相关文章

数据标准化

1、均值方差标准化(Z-Score标准化) 计算过程: 对每个属性/每列分别进行一下操作,将数据按属性/按列减去其均值,并除以其方差,最终使每个属性/每列的所有数据都聚集在均值为0,方差为1附近。 公式:(x-mean(x…

电子信息工程专业课复习知识点总结:(五)通信原理

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 第一章通信系统概述——通信系统的构成、各部分性质、性能指标1.通信系统的组成?2.通信系统的分类?3.调制、解调是什么?有什么用…

【数据结构--排序】堆排序

💐 🌸 🌷 🍀 🌹 🌻 🌺 🍁 🍃 🍂 🌿 🍄🍝 🍛 🍤 📃个人主页 :阿然成长日记 …

在北京多有钱能称为富

背景 首先声明,此讨论仅限个人的观点,因为我本身不富嘛,所以想法应该非常局限。 举个栗子 富二代问我朋友,100~1000w之间,推荐一款车? 一开始听到这个问题的时候,有被唬住,觉得预…

XXE 漏洞及案例实战

文章目录 XXE 漏洞1. 基础概念1.1 XML基础概念1.2 XML与HTML的主要差异1.3 xml示例 2. 演示案例2.1 pikachu靶场XML2.1.1 文件读取2.1.2 内网探针或者攻击内网应用(触发漏洞地址)2.1.4 RCE2.1.5 引入外部实体DTD2.1.6 无回显读取文件 3. XXE 绕过3.1 dat…

Nitrux 3.0 正式发布并全面上市

导读乌里-埃雷拉(Uri Herrera)近日宣布 Nitrux 3.0 正式发布并全面上市,它是基于 Debian、无 systemd、不可变的 GNU/Linux 发行版的最新安装媒体,利用了 KDE 软件。 Nitrux 3.0 由带有 Liquorix 味道的 Linux 6.4.12 内核提供支持…

QT-day4

画一个时钟 widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QPaintEvent> #include <QDebug> #include <QPainter> #include <QTimer> #include <QTime>QT_BEGIN_NAMESPACE namespace Ui { class Widget; } Q…

记一次逆向某医院挂号软件的经历

背景 最近家里娃需要挂专家号的儿保&#xff0c;奈何专家号实在过于抢手&#xff0c;身为程序员的我也没有其他的社会资源渠道可以去弄个号&#xff0c;只能发挥自己的技术力量来解决这个问题了。 出师不利 首先把应用安装到我已经 Root 过的 Pixel 3 上面&#xff0c;点击应…

关于Pandas数据分析

pandas的数据加载与预处理 数据清洗&#xff1a;洗掉脏数据 整理分析&#xff1a;字不如表 数据展现&#xff1a;表不如图 环境搭建 pythonjupyter anaconda Jupyter Notebook Jupyter Notebook可以在网页页面中直接编写代码和运行代码, 代码的运行结果也会直接在代码块下显示…

【 Ubuntu】systemd服务创建、启用、状态查询、自启等

要在 Ubuntu 启动后执行一个守护脚本&#xff0c;您可以使用 Shell 脚本编写一个 systemd 服务单元。systemd 是 Ubuntu 中常用的服务管理工具&#xff0c;可以在系统启动时自动启动和管理服务。 下面是一个示例的守护脚本和 systemd 服务单元的步骤&#xff1a; 创建守护脚本…

Spring之依赖注入源码解析

基于Autowired的依赖注入底层原理 基于Resource注解底层工作流程图&#xff1a; 1 Spring中到底有几种依赖注入的方式&#xff1f; 首先分两种&#xff1a; 手动注入 自动注入 1.1 手动注入 在XML中定义Bean时&#xff0c;就是手动注入&#xff0c;因为是程序员手动给某…

LeetCode 75-02:字符串的最大公因子

前置知识&#xff1a;使用欧几里得算法求出最大公约数 func gcdOfStrings(str1 string, str2 string) string {if str1str2 ! str2str1 {return ""}return str1[:gcd(len(str1), len(str2))] }func gcd(a, b int)int{if b 0{return a}return gcd(b, a%b) }

车载软件架构 —— AUTOSAR Vector SIP包(二)

车载软件架构 —— AUTOSAR Vector SIP包(二) 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 没有人关注你。也无需有人关注你。你必须承认自己的价值,你不能站在他人的角度来反对自己。人生在…

Android Kotlin 基础详解

1,基础语法 1.1 可变变量与不可变变量 可以多次赋值的变量是可变变量&#xff0c;用关键字var表示&#xff1a; var <标识符> : <类型> <初始化值> 注意&#xff0c;在kotlin中成员变量不会赋默认值&#xff0c;不像java一样&#xff0c;必须手动添加默…

83、SpringBoot --- 下载和安装 MSYS2、 Redis

★ 下载和安装MSYS2&#xff08;作用&#xff1a;可在Windows模拟一个Linux的编译环境&#xff09; 得到Redis的编译环境——在Linux平台上&#xff0c;这一步可以省略。&#xff08;1&#xff09;登录MSYS2官网&#xff08;http://repo.msys2.org/distrib/ &#xff09;下载M…

Java 项目-基于 SpringBoot+Vue的疫情网课管理系统

文章目录 第一章 简介第二章 技术栈第三章 系统分析3.4.2学生用例 第四章 系统设计第五章 系统实现5.1学生功能模块5.2管理员功能模块5.3教师功能模块 六 源码咨询 第一章 简介 疫情网课也都将通过计算机进行整体智能化操作&#xff0c;实现的功能如下。 例如 管理员&#x…

【力扣-每日一题】LCP 06. 拿硬币

class Solution { public:int minCount(vector<int>& coins) {int res0;for(auto i:coins){resi/2;res(i%2)?1:0;}return res;} };

2023 年前端 UI 组件库概述,百花齐放!

UI组件库提供了各种常见的 UI 元素&#xff0c;比如按钮、输入框、菜单等&#xff0c;只需要调用相应的组件并按照需求进行配置&#xff0c;就能够快速构建出一个功能完善的 UI。 虽然市面上有许多不同的UI组件库可供选择&#xff0c;但在2023年底也并没有出现一两个明确的解决…

《计算机视觉中的多视图几何》笔记(10)

10 3D Reconstruction of Cameras and Structure 本章主要描述了如何利用2张图片来恢复相机的参数以及物体在三维空间中的形状。 文章目录 10 3D Reconstruction of Cameras and Structure10.1 Outline of reconstruction method10.2 Reconstruction ambiguity10.3 The proje…

批量、在线学习, 参数、非参数学习

批量学习&#xff08;Batch Learning&#xff09;和在线学习&#xff08;Online Learning&#xff09; 批量学习 批量学习的概念非常容易理解&#xff0c;我们之前介绍的许多机器学习算法&#xff0c;如果没有特殊说明&#xff0c;都可以采用批量学习的方式。批量学习的过程通…