【设计模式 05】原型模式

news2024/11/17 13:44:47

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

python代码:

import copy

class ComplexObject:
    def __init__(self, data):
        # 资源型操作 
        self.data = data
    
    def 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;
    }

    @Override
    public 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.coloradmin.cn/o/1499422.html

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

相关文章

【C++干货基地】六大默认成员函数: This指针 | 构造函数 | 析构函数

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 引入 哈喽各位铁汁们好啊&#xff0c;我是博主鸽芷咕《C干货基地》是由我的襄阳家乡零食基地有感而发&#xff0c;不知道各位的…

【学习心得】Python好库推荐——websocket-client

websocket-client 是一个在 Python 中广泛使用的库&#xff0c;用于创建 WebSocket 客户端并实现与 WebSocket 服务器的双向通信。更多的关于websocket协议介绍&#xff0c;可以看看我之前写的文章哦&#xff01; 【学习心得】websocket协议简介并与http协议对比http://t.csdn…

什么是工业协议网关?作用是什么?

在工业自动化和智能制造领域&#xff0c;数据的采集、传输和处理是实现设备监控、远程控制和优化的关键。而工业协议网关&#xff0c;作为连接工业设备与上层管理系统的桥梁&#xff0c;发挥着至关重要的作用。今天&#xff0c;我们就来深入解析一下HiWoo Box这一工业协议网关的…

汽车车灯罩破损修复需要准备哪些材料?

汽车车灯罩破损修复需要准备哪些材料&#xff1f; 汽车灯罩破损修复需要准备的材料包括&#xff1a; 砂纸&#xff1a;用于打磨灯罩表面&#xff0c;去除污渍和划痕。抛光蜡或牙膏&#xff1a;用于抛光灯罩表面&#xff0c;使其恢复光滑和透明。UV胶或玻璃胶&#xff1a;用于填…

WPF —— Border、Frame控件详解

一&#xff1a;Border控件 1.Border介绍 Border&#xff08;边框&#xff09;是一个装饰的控件&#xff0c;此控件绘制一个边框、一个背景。用border标签包括目标标签。 不能有多个子元素&#xff0c;要想有多个子元素&#xff0c;多个子元素放在一个父元素下。或者放到grid标…

coreldraw2024中文版发布最新精简版绿色版

CorelDRAW Graphics Suite 2024&#xff08;简称CDR2024&#xff09;是一款非常专业的图形设计工具&#xff0c;已推出全新的2024版本&#xff0c;在功能和体验上进一步提升。它具备最新的填充和透明设备功能&#xff0c;可以完全控制任何类型的纹理&#xff0c;适用于网络摄影…

Redis 配置文件详解

Units 单位 配置大小单位&#xff0c;开头定义了一些基本的度量单位&#xff0c;只支持bytes&#xff0c;不支持bit&#xff0c;大小写不敏感。 # Redis configuration file example. # # Note that in order to read the configuration file, Redis must be # started with …

png格式怎么改成jpg?3种转换方法轻松掌握

png格式怎么改成jpg&#xff1f;在日常生活和工作中&#xff0c;PNG格式转换成JPG格式的需求十分普遍。无论是制作网页时需要优化图片加载速度&#xff0c;还是在图片编辑过程中需要调整图片格式以兼容不同平台&#xff0c;亦或是需要共享图片时减小文件大小&#xff0c;PNG转J…

惊呼:腾讯云服务器99元一年,要不要来一台?

腾讯云服务器99元一年是真的吗&#xff1f;真的&#xff0c;99元优惠购买入口 txybk.com/go/99 折合每天8元1个月&#xff0c;腾讯云99元服务器配置为2核2G3M带宽&#xff0c;2024年99元服务器配置最新报价为61元一年&#xff0c;如下图&#xff1a; 腾讯云服务器99元一年 腾讯…

华为“仓颉”不是中文编程:中文编程早有所属,势如破竹

“何时能见证中国自主研发的编程语言崛起&#xff1f;”这是我们这些对IT生态心怀关切的人常常深思的问题。 语言&#xff0c;作为文化的灵魂&#xff0c;总是与特定的环境和人群紧密相连。无论是中文还是英语&#xff0c;它们都不仅仅是交流的工具&#xff0c;更是各自文化背…

网络入侵检测系统之Suricata(十)--ICMP实现详解

ICMP协议 Common header 0 1 2 40 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 0 1 2 3 4--------------------------------| Type | Code | Checksum |-----…

学c++对Python有帮助吗?

学习C对Python编程确实有帮助&#xff0c;尽管这两种语言在许多方面有很大的不同。以下是学习C可能对Python编程产生帮助的几个方面&#xff1a; 理解底层概念&#xff1a;C是一种更接近硬件的编程语言&#xff0c;它要求程序员更深入地理解内存管理、指针、数据类型等底层概念…

el-form-item内的el-select如何自适应宽度

最近在使用element-ui做后台管理的时候&#xff0c;有个需求是在弹窗组件里面&#xff0c;添加一个el-select下拉框选项&#xff0c;但是给el-select设置的宽度无法自适应&#xff0c;原因很简单&#xff0c;我们不需要设置固定宽度&#xff0c;设置百分比就行了&#xff0c;让…

FPGA AXI4总线信号介绍篇

一.AXI总线类型接口 AXI是一种总线协议&#xff0c;可以挂在多个master和slave&#xff1a; &#xff08;1&#xff09;AXI4&#xff1a;主要面向高性能地址映射通信的需求&#xff1b;&#xff08;突发数据&#xff09;&#xff08;地址映射模式&#xff09; &#x…

微软大中华区商业应用事业部高级产品经理张诗源,将出席“ISIG-低代码/零代码技术与应用发展峰会”

3月16日&#xff0c;第四届「ISIG中国产业智能大会」将在上海中庚聚龙酒店拉开序幕。本届大会由苏州市金融科技协会指导&#xff0c;企智未来科技&#xff08;LowCode低码时代、RPA中国、AIGC开放社区&#xff09;主办。大会旨在聚合每一位产业成员的力量&#xff0c;深入探索低…

MySQL 学习笔记(基础篇 Day1)

「写在前面」 本文为黑马程序员 MySQL 教程的学习笔记。本着自己学习、分享他人的态度&#xff0c;分享学习笔记&#xff0c;希望能对大家有所帮助。 目录 0 课程介绍 1 MySQL 概述 1.1 数据库相关概念 1.2 MySQL 数据库 2 SQL 2.1 SQL 通用语法 2.2 SQL 分类 2.3 DDL 2.4 图形…

大路灯护眼灯哪个牌子好?精心挑选五款大路灯,无广分享

当前&#xff0c;大路灯作为一种良好帮助改善光线环境的工具&#xff0c;受到了广泛关注&#xff0c;并以其卓越的光线舒适度功能赢得了许多用户的青睐。然而&#xff0c;其迅速增长的人气也伴随着一些负面反响&#xff0c;其中包括了关于可能对眼睛造成损伤和健康风险的报道。…

基于React的低代码开发:探索应用构建的新模式

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法|MySQL| ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-OywB1Epu30PrvOJQ {font-family:"trebuchet ms",verdana,arial,sans-serif;f…

Grafana dashboards as ConfigMaps

文章目录 1. 简介2. 创建 configmaps3. grafana 界面查看 1. 简介 将 Grafana 仪表板存储为 Kubernetes ConfigMap 相比传统的通过 Grafana 界面导入仪表板有以下一些主要优点: 版本控制&#xff1a; ConfigMap 可以存储在版本控制系统(如Git)中,便于跟踪和管理仪表板的变更历…

【排序算法】深入理解快速排序算法:从原理到实现

目录 1. 引言 2. 快速排序算法原理 3. 快速排序的时间复杂度分析 4. 快速排序的应用场景 5. 快速排序的优缺点分析 5.1 优点&#xff1a; 5.2 缺点&#xff1a; 6. Java、JavaScript 和 Python 实现快速排序算法 6.1 Java 实现&#xff1a; 6.2 JavaScript 实现&#…