设计模式-创建型-原型模式

server/2024/11/27 23:34:12/

1.概念

提前创建出一个对象,但在要使用该类对象时不是直接使用这个已经存在的对象,而是克隆一个新的对象。

2.作用

有时我们需要在不同的地方使用相同的对象,但是如果这个对象构成比较复杂的情况下,我们很难甚至不可能从头创建一个一模一样的,所以需要从已有的对象克隆一个出来。
这个时候使用原型模式就可以帮助我们快速获取与原型相同的对象。

3.应用场景

我们需要的对象构成比较复杂时
代码中需要频繁创建对象时

4.特点

克隆操作由原型对象自己完成,并向外部提供克隆接口

5.类与对象关系

原型类中提供clone方法

6.实现

原型对象

public class Prototype implements Cloneable {private String name;public Prototype(String name) {this.name = name;}public String getName() {return name;}public void setName(String name) {this.name = name;}// 重写 clone 方法以实现浅拷贝@Overrideprotected Prototype clone() throws CloneNotSupportedException {return (Prototype) super.clone();}@Overridepublic String toString() {return "Prototype{" +"name='" + name + '\'' +'}';}
}

因为java的Object类中已经提供了clone()方法,所以我们使用原型模式时不是从头写clone方法,而是重写父类的方法,然后才在重写的方法中完成逻辑。


http://www.ppmy.cn/server/145468.html

相关文章

数据结构_图的应用

最小生成树 Prim算法 int AMGraph::sum(string v) {int start, totalW, cnt, minW, u, vv, i, j;start LocateVex(v); // 获取起始顶点编号memset(visited, false, sizeof(visited)); // 初始化访问状态visited[start] true;totalW 0; // 最小生成树的总权重cnt 1; // 当前…

简单理解下基于 Redisson 库的分布式锁机制

目录 简单理解下基于 Redisson 库的分布式锁机制代码流程:方法的调用:具体锁的实现:riderBalance 方法:tryLock 方法(重载):tryLock 方法(核心实现): 简单理解…

Leetcode 每日一题 3.无重复字符的最长子串

目录 问题描述 输入输出格式 示例 滑动窗口算法步骤 通过图片 代码实现 复杂度分析 题目地址 注意事项 问题描述 给定一个字符串 s,我们需要找出其中不含有重复字符的最长子串的长度。子串是指字符串中连续的字符序列,而子序列则是字符序列&am…

FastDFS基础概述与系统架构详解

目录 一、FastDFS简介二、FastDFS系统架构1. 跟踪服务器(Tracker Server)2. 存储服务器(Storage Server)3. 客户端(Client) 三、FastDFS功能逻辑分析1. 文件上传(Upload File)原理2.…

如何安全高效地打开和管理动态链接库(DLL)?系统提示dll丢失问题的多种有效修复指南

动态链接库(DLL)文件是Windows操作系统中非常重要的一部分,它们包含了程序运行所需的代码和数据。当系统提示DLL文件丢失时,可能会导致应用程序无法正常运行。以下是一些安全高效地打开和管理DLL文件以及修复DLL丢失问题的方法&am…

常见面试题----深入源码理解MQ长轮询优化机制

引言 在分布式系统中,消息队列(Message Queue, MQ)扮演着至关重要的角色。MQ不仅实现了应用间的解耦,还提供了异步消息处理、流量削峰等功能。而在MQ的众多特性中,长轮询(Long Polling)机制因其…

[自动化]获取每次翻页后的页面 URL

from DrissionPage import ChromiumPage page ChromiumPage() page.get(热门项目 - Gitee.com) page.listen.start(gitee.com/explore) for i in range(5): page("relnext").click() res page.listen.wait() print(res.url) 这段代码使用了DrissionPage库中的Chromi…

C#基础46-50

46.数组x中有n个数,求出奇数的个数cn1和偶数的个数cn2以及数组x下标为偶数的元素值的算术平均值pj(保留2位小数)。结果cn1,cn2,pj输出到控制台。 47.求出10000以下符合条件的自然数。条件是:千位数字与百位数字之和等于十位数字与…