【设计模式 05】原型模式

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

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;
}

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Vue-Router使用

1.安装 npm install vue-router4 2. 添加路由 新建router文件夹&#xff0c;新建文件 index.ts import { createRouter, createWebHashHistory,createWebHistory} from "vue-router";const routes [{path: /login,component: () > import("../views/Logi…

18个惊艳的可视化大屏(第19辑):工业制造、智能工厂

实时监控和数据展示 可视化大屏可以集成和展示各种传感器、设备和系统的实时数据。通过将数据可视化展示在大屏上&#xff0c;工厂管理人员可以实时监控生产线的状态、设备的运行情况、生产效率等重要指标。这有助于及时发现问题、做出决策&#xff0c;并提高生产效率和质量。…

粉色ui微信小程序源码/背景图/头像/壁纸小程序源码带流量主

云开发版粉色UI微信小程序源码&#xff0c;背景图、头像、壁纸小程序源码&#xff0c;带流量主功能。 云开发小程序源码无需服务器和域名即可搭建小程序另外还带有流量主功能噢&#xff01;微信平台注册小程序就可以了。 这套粉色UI非常的好看&#xff0c;里面保护有背景图、…

数学建模【模糊综合评价分析】

一、模糊综合评价分析简介 提到模糊综合评价分析&#xff0c;就先得知道模糊数学。1965年美国控制论学家L.A.Zadeh发表的论文“Fuzzy sets”标志着模糊数学的诞生。 模糊数学又称Fuzzy数学&#xff0c;是研究和处理模糊性现象的一种数学理论和方法。模糊性数学发展的主流是在…

C++:拷贝构造函数

1.概念 在现实生活中&#xff0c;可能存在一个与你一样的自己&#xff0c;我们称之为双胞胎。那在创建对象的时候&#xff0c;可否创建一个与已存在对象一模一样的新对象呢&#xff1f;答案是可以的&#xff0c;这就要通过拷贝构造函数来实现了。 拷贝构造函数&#xff1a;只有…

Go-Gin-example 第五部分 加入swagger

上一节链接 swagger 为什么要用swagger 问题起源于 前后端分离&#xff0c; 后端&#xff1a;后端控制层&#xff0c;服务层&#xff0c;数据访问层【后端团队】前端&#xff1a;前端控制层&#xff0c;视图层&#xff0c;【前端团队】 所以产生问题&#xff1a;前后端联调…

基类指针指向派生类对象,基类不带虚函数,子类带虚函数产生的异常分析

基类指针指向派生类对象&#xff0c;基类不带虚函数&#xff0c;子类带虚函数产生的异常分析 基类指针指向派生类对象&#xff0c;指针的起始地址一定是指向基类起始地址的 这种情况下&#xff0c;当基类没有虚函数&#xff0c;而子类存在虚函数时&#xff0c;就会出现问题&am…

java写DBF文件

之前漏了个功能支持&#xff0c;那就是WhoNet上报的DBF文件导出&#xff0c;因为DBF基本没什么人在用了&#xff0c;实现DbfUtil供业务写DBF文件做WhoNet上报导出用。 DBF读写工具类 package JRT.Core.Util;import com.linuxense.javadbf.DBFDataType; import com.linuxense.…

springboot快速构建项目

1.Spring的基本步骤 2.构建项目 第一次下包速度比较慢&#xff0c;可以考虑使用镜像 至此项目构建完成 3.启动并配置数据库 新建一个数据库&#xff0c;新建一个表 下面这里也可以【重构-重命名】为yml后缀&#xff08;代码可粘下面的&#xff0c;后面有写&#xff09; Yml后…

一文看懂:组件化设计,B端系统不再重复造轮子。

B端组件化设计是指将企业级系统的界面设计和开发分解为独立的可复用组件&#xff0c;以实现系统的模块化和灵活性。 B端组件化设计的核心思想是将界面拆分成独立的功能组件&#xff0c;每个组件负责特定的功能或业务逻辑&#xff0c;可以独立开发、测试和维护&#xff0c;同时可…

校园小情书微信小程序,社区小程序前后端开源,校园表白墙交友小程序

功能 表白墙卖舍友步数旅行步数排行榜情侣脸漫画脸个人主页私信站内消息今日话题评论点赞收藏 效果图

谷粒学院--在线教育实战项目【一】

谷粒学院--在线教育实战项目【一】 一、项目概述1.1.项目来源1.2.功能简介1.3.技术架构 二、Mybatis-Plus概述2.1.简介2.2.特性 三、Mybatis-Plus入门3.1.创建数据库3.2.创建 User 表3.3.初始化一个SpringBoot工程3.4.在Pom文件中引入SpringBoot和Mybatis-Plus相关依赖3.5.第一…

Python高级一

一、介绍 1、特点 面向对象 对象&#xff1a;对客观事物的抽象 对一个具体事务的存在&#xff0c;现实生活中可以看得见摸得着的 可以直接使用的 2、类和对象的关系 类&#xff1a;对对象的抽象 具有相似内部状态和运动规律的实体的集合(或统称为抽象) 具有相同属性和行…

专治Java底子差,线程操作篇(1)

&#x1f497;推荐阅读文章&#x1f497; &#x1f338;JavaSE系列&#x1f338;&#x1f449;1️⃣《JavaSE系列教程》&#x1f33a;MySQL系列&#x1f33a;&#x1f449;2️⃣《MySQL系列教程》&#x1f340;JavaWeb系列&#x1f340;&#x1f449;3️⃣《JavaWeb系列教程》…

OA系统看飞书,能把繁杂场景设计的这么流畅,绝对是高手。

OA系统看飞书&#xff0c;能把繁杂场景设计的这么流畅&#xff0c;绝对是高手。 2023-08-18 23:33贝格前端工场 飞书是一款功能强大、操作流畅的企业协作工具&#xff0c;它提供了丰富的功能和灵活的场景设计&#xff0c;使得用户在使用过程中能够更加高效地协作和沟通。 以…

开放式高实时高性能PLC控制器解决方案-基于米尔电子STM32MP135

前言 随着工业数字化进程加速与IT/OT深入融合&#xff0c;不断增加的OT核心数据已经逐步成为工业自动化行业的核心资产&#xff0c;而OT层数据具备高实时、高精度、冗余度高、数据量大等等特点&#xff0c;如何获取更加精准的OT数据对数字化进程起到至关重要的作用&#xff0c;…

微服务day06-Docker

Docker 大型项目组件较多&#xff0c;运行环境也较为复杂&#xff0c;部署时会碰到一些问题&#xff1a; 依赖关系复杂&#xff0c;容易出现兼容性问题 开发、测试、生产环境有差异 1.什么是Docker? 大型项目组件很多&#xff0c;运行环境复杂&#xff0c;部署时会遇到各种…

Linux - 反弹Shell

概念 Shell 估计大家都不陌生&#xff0c;简单来说&#xff0c;就是实现用户命令的接口&#xff0c;通过这个接口我们就能实现对计算机的控制&#xff0c;比如我们常见的 ssh 就是执行的 Shell 命令实现对远程对服务器的控制。 那反弹 Shell &#xff08; Reverse Shell&…

深入浅出(二)MVVM

MVVM 1. 简介2. 示例 1. 简介 2. 示例 示例下载地址&#xff1a;https://download.csdn.net/download/qq_43572400/88925141 创建C# WPF应用(.NET Framework)工程&#xff0c;WpfApp1 添加程序集 GalaSoft.MvvmLight 创建ViewModel文件夹&#xff0c;并创建MainWindowV…

C语言指针(5):strlen与sizeof的区别及指针笔试题练习

1、sizeof和strlen的对比 sizeof sizeof计算变量所占内存内存空间⼤⼩的&#xff0c;单位是字节&#xff0c;如果操作数是类型的话&#xff0c;计算的是使⽤类型创建的变量所占内存空间的⼤⼩。简单来说&#xff0c;sizeof 只关注占⽤内存空间的⼤⼩&#xff0c;不在乎内存中存…