【设计模式 05】原型模式

有的时候,我们创建对象,需要耗费大量时间在一些资源型操作上,这个时候,我们就可以先创建出一个模板,然后每次创建的时候直接从模板复制即可,不用反复进行耗时的资源型操作。

python代码:

import copyclass ComplexObject:def __init__(self, data):# 资源型操作 self.data = datadef clone(self):# 复制return copy.deepcopy(self)# 创建原型对象
obj1 = ComplexObject(data = "large data")
# 创建新对象,直接拷贝原对象
new_object = original_object.clone()

 

JAVA代码:

// 1. 定义抽象原型类
public abstract class Prototype  implements Coneable {public abstract Prototype clone();
}
// 2. 定义具体原型类
public class ConcretePrototype extends Prototype {private String data;public ConcretePrototype(String data) {this.data = data;}@Overridepublic Prototype clone() {return new ConcretePrototype(this.data);}public String getData() {return data;}
}// 3. 客户端代码
public class Client {public static void main(String[] args) {// 创建原型对象Prototype original = new ConcretePrototype("原始对象");// 克隆原型对象Prototype clone = original.clone();// 输出克隆对象的数据System.out.println("Clone Data: " + ((ConcretePrototype) clone).getData());}
}

 【设计模式专题之原型模式】5. 矩形原型

#include<iostream>
#include<string>
#include<vector>
using namespace std;// 抽象原型类
class Prototype {
public:virtual Prototype* clone() const = 0;virtual string getDetails() const = 0;virtual ~Prototype() {}
};// 具体矩形原型类
class RectanglePrototype : public Prototype {
private:string color;int width;int height;
public:// 构造方法RectanglePrototype(const string& color, int width, int height) : color(color), width(width), height(height) {}// 克隆方法Prototype* clone() const override {return new RectanglePrototype(*this);}string getDetails() const override {return "Color: " + color + ", Width: " + to_string(width) + ", Height: " + to_string(height);}
};// 客户端 
int main() {vector<Prototype*> rectangles;// 读取需要创建的矩形数量int N;cin >> N;// 地区每个矩形的属性星系并创建矩形对象for (int i = 0; i < N; ++i) {string color;int width, height;cin >> color >> width >> height;// 创建原型对象Prototype* originalRectangle = new RectanglePrototype(color, width, height);// 将原型对象保存到向量中rectangles.push_back(originalRectangle);}// 克隆对象for (const auto& rectangle : rectangles) {Prototype* cloneRectangle = rectangle->clone();cout << cloneRectangle->getDetails() << endl;// 释放克隆对象的内存delete cloneRectangle;}// 释放原型对象的内存for (const auto& rectangle : rectangles) {delete rectangle;}return 0;
}

 

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

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

相关文章

一命通关前缀和

前缀和 简介 先来简单看一个场景。现在有一个公交车&#xff0c;第一站上了4个人&#xff0c;第二站上了7个人&#xff0c;第三站上了1个人&#xff0c;第四站上了5个人&#xff0c;问一共上了多少人&#xff1f; 答案很显而易见&#xff0c;只需要遍历这个数组&#xff0c;把…

使用PHP实现动态代理IP的功能

目录 前言 一、 什么是代理IP 二、动态代理IP的原理 三、使用ProxyCrawl API获取代理IP 安装和配置 发送请求获取代理IP 实现动态代理IP的功能 总结 前言 动态代理IP是一种通过不断切换不同的代理IP来隐藏真实IP地址的技术。在使用网络爬虫、进行数据采集、访问被封IP…

基于 Win Server 2008 复现 IPC$ 漏洞

写在前面 本篇博客演示了使用 winXP&#xff08;配合部分 win10 的命令&#xff09;对 win server 2008 的 IPC$ 漏洞进行内网渗透&#xff0c;原本的实验是要求使用 win server 2003&#xff0c;使用 win server 2003 可以规避掉很多下面存在的问题&#xff0c;建议大家使用 …

k8s 网络概念与策略控制

一、Kubernetes 基本网络模型 Kubernetes 的容器网络模型可以把它归结为约法三章和四大目标。 1、约法三章 约法三章确保了Kubernetes容器网络模型的基本特性&#xff1a; ① 任意两个 pod 之间可以直接通信&#xff1a;在Kubernetes中&#xff0c;每个 Pod 都被分配了一个…

ResponseStatusException

目录 概述&#xff1a; 综合实例&#xff1a; 继承 ResponseStatusException-自定义异常类 继承 ResponseStatusException-自定义响应头信息 继承 ResponseStatusException-定制更多异常处理逻辑 继承 ResponseStatusException-根据异常发生的上下文动态改变 HTTP 状态码…

网络协议栈--应用层--HTTP协议

目录 本节重点理解应用层的作用, 初识HTTP协议 一、应用层二、HTTP协议2.1 认识URL2.2 urlencode和urldecode2.3 HTTP协议格式2.4 HTTP的方法2.4 HTTP的状态码2.5 HTTP常见的Header属性 三、最简单的HTTP服务器3.1 HttpServer.hpp3.2 HttpServer.cc3.3 HttpClient.cc3.4 log.hp…

Allure小白下载安装

1、下载官网地址&#xff1a;https://github.com/allure-framework/allure2/releases 2、下载安装包后需要解压到一个非中文名称路径下 3、配置环境变量 D:\Allure\allure-2.27.0\bin 我的电脑右键选择属性&#xff0c;高级系统设置&#xff0c;环境变量 4、CMD查看安装all…

QGIS3.34官方版本已经不能支持Win7,如果需要在WIN7上使用,请用微云上我打包的

在网上看到有些网友在WIN7上安装官方发布的QGIS安装&#xff0c;会遇到上述问题&#xff0c;而不能正常运行&#xff01; 我打包的QGIS可以在WIN7上正常运行&#xff0c;这个我专门测试过。 详见&#xff1a; 打包了一个QGIS3.34分享给大家 下载地址&#xff1a;文件分享 软…

WordPress供求插件API文档:用户登录

该文档为WordPress供求插件文档&#xff0c;详情请查看 WordPress供求插件&#xff1a;一款专注于同城生活信息发布的插件-CSDN博客文章浏览阅读67次。WordPress供求插件&#xff1a;sliver-urban-life 是一款专注于提供同城生活信息发布与查看的插件&#xff0c;该插件可以实…

水牛社:专为创业者和网赚小白精心打造的助手

近几年来&#xff0c;经济发展快是快&#xff0c;物价也在蹭蹭往上涨&#xff0c;但工资却不见明显提升&#xff0c;随着生活成本的增加&#xff0c;单单靠工资&#xff0c;已经很难维持生活开支&#xff0c;加之疫情的影响&#xff0c;很多行业发展不景气&#xff0c;一些岗位…

liunx操作系统 环境变量

环境变量 main函数参数 命令行参数环境变量 环境变量的查看环境变量的获取 main函数参数 命令行参数 main函数是有参数的&#xff0c;只是我们一般不适用 这是main函数从bash中读取进程数据使用的一个基本入口。 下面进行简单演示。 o 好oo都是我们输入的命令行参数。其实&a…

【CSP试题回顾】201503-3-节日

CSP-201503-3-节日 关键点&#xff1a;格式化输出 在C中&#xff0c;格式化输出通常利用iostream库中的功能&#xff0c;特别是iomanip头文件提供的一系列操作符。这些操作符用于控制输出格式&#xff0c;如宽度、填充、对齐方式等。在你提供的代码中&#xff0c;用于格式化输…