原型模式,简化多次创建相同的内容

2024-09-03 00:58

本文主要是介绍原型模式,简化多次创建相同的内容,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

原型模式的定义:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
UML图:


C++代码:

// filename: prototype.h
// author: Qinglong.mark.He
#include <iostream>
#include < string >

class  Prototype
{
protected :
    std:: string  name;
public :
    Prototype(){}
     virtual  ~Prototype(){}
    
     virtual  Prototype *clone(){ return  nullptr;}
     virtual   void   set ( char  *n){}
     virtual   void  show(){}
};

class  PrototypeA:  public  Prototype
{
public :
    PrototypeA(){
        name = "PrototypeA";
    }
    
    PrototypeA( const  PrototypeA &r){
        name = r.name;
    }
    ~PrototypeA(){
    }
    PrototypeA *clone(){
         return   new  PrototypeA(* this );
    }
     void  show(){
        std::cout<<"PrototypeA name: "<<name<<std::endl;
    }
};

yiyuan.120ask.com/news/7444/9676967.html

yiyuan.120ask.com/news/7444/9676965.html

yiyuan.120ask.com/news/7444/9676963.html

yiyuan.120ask.com/news/7444/9676979.html

yiyuan.120ask.com/news/7444/9676957.html

yiyuan.120ask.com/news/7444/9676954.html

yiyuan.120ask.com/news/7444/9676994.html

yiyuan.120ask.com/news/7444/9676990.html

yiyuan.120ask.com/news/7444/9676984.html

yiyuan.120ask.com/news/7444/9676944.html

yiyuan.120ask.com/news/7444/9676941.html

yiyuan.120ask.com/news/7444/9676939.html

yiyuan.120ask.com/news/7444/9676936.html

yiyuan.120ask.com/news/7444/9676934.html

yiyuan.120ask.com/news/7444/9676931.html

yiyuan.120ask.com/news/7444/9676927.html

yiyuan.120ask.com/news/7444/9676926.html

yiyuan.120ask.com/news/7444/9676924.html

yiyuan.120ask.com/news/7444/9676921.html

yiyuan.120ask.com/news/7444/9676919.html


class  PrototypeB:  public  Prototype
{
public :
    PrototypeB(){
        name = "PrototypeB";
    }
    
    PrototypeB( const  PrototypeB &r){
        name = r.name;
    }
    ~PrototypeB(){
    }
    PrototypeB *clone(){
         return   new  PrototypeB(* this );
    }
     void  show(){
        std::cout<<"PrototypeB name: "<<name<<std::endl;
    }
};


测试用例:

#include "prototype.h"

int  main(){
    auto r1 =  new  PrototypeA;
    auto r2 =  new  PrototypeB;
    auto r3 = r1->clone();
    auto r4 = r2->clone();

    r1->show();
    r2->show();
    delete r1;
    delete r2;

www.aibang.com/article/444091677-443192907/product/11926341.html

www.aibang.com/show/444091677-443192907/product/11926343.html

www.aibang.com/show/444091677-443192907/product/11926345.html

www.aibang.com/show/444091677-443192907/product/11926347.html

www.aibang.com/show/444091677-443192907/product/11926349.html

www.aibang.com/article/444091677-443192907/product/11545941.html

www.aibang.com/show/444091677-443192907/product/11547029.html

www.aibang.com/show/444091677-443192907/product/11926355.html

www.aibang.com/show/444091677-443192907/product/11926357.html

www.aibang.com/show/444091677-443192907/product/11926359.html

www.aibang.com/show/444091677-443192907/product/11926377.html

www.aibang.com/show/444091677-443192907/product/10481603.html

www.aibang.com/show/444091677-443192907/product/11926385.html

www.aibang.com/show/444091677-443192907/product/11926389.html

www.aibang.com/show/444091677-443192907/product/11926395.html

www.aibang.com/show/444091677-443192907/product/11926399.html

www.aibang.com/article/444091677-443192907/product/11926401.html

www.aibang.com/show/444091677-443192907/product/11588729.html

www.aibang.com/show/444091677-443192907/product/11926409.html

www.aibang.com/show/444091677-443192907/product/10532459.html

www.aibang.com/show/444091677-443192907/product/11926423.html

www.aibang.com/show/444091677-443192907/product/11926429.html

www.aibang.com/show/444091677-443192907/product/11926431.html

www.aibang.com/show/444091677-443192907/product/11926437.html

www.aibang.com/show/444091677-443192907/product/11926439.html

www.aibang.com/show/444091677-443192907/product/11926445.html

www.aibang.com/show/444091677-443192907/product/11926449.html

www.aibang.com/show/444091677-443192907/product/11926457.html

www.aibang.com/show/444091677-443192907/product/11926463.html

www.aibang.com/show/444091677-443192907/product/11926467.html


    r3->show();
    r4->show();
    delete r3;
    delete r4;
    
     return  0;
}


 

这篇关于原型模式,简化多次创建相同的内容的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


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

相关文章

linux批量替换文件内容的实现方式

《linux批量替换文件内容的实现方式》本文总结了Linux中批量替换文件内容的几种方法,包括使用sed替换文件夹内所有文件、单个文件内容及逐行字符串,强调使用反引号和绝对路径,并分享个人经验供参考... 目录一、linux批量替换文件内容 二、替换文件内所有匹配的字符串 三、替换每一行中全部str1为st

从入门到精通详解LangChain加载HTML内容的全攻略

《从入门到精通详解LangChain加载HTML内容的全攻略》这篇文章主要为大家详细介绍了如何用LangChain优雅地处理HTML内容,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录引言:当大语言模型遇见html一、HTML加载器为什么需要专门的HTML加载器核心加载器对比表二

IntelliJ IDEA2025创建SpringBoot项目的实现步骤

《IntelliJIDEA2025创建SpringBoot项目的实现步骤》本文主要介绍了IntelliJIDEA2025创建SpringBoot项目的实现步骤,文中通过示例代码介绍的非常详细,对大家... 目录一、创建 Spring Boot 项目1. 新建项目2. 基础配置3. 选择依赖4. 生成项目5.

Linux线程之线程的创建、属性、回收、退出、取消方式

《Linux线程之线程的创建、属性、回收、退出、取消方式》文章总结了线程管理核心知识:线程号唯一、创建方式、属性设置(如分离状态与栈大小)、回收机制(join/detach)、退出方法(返回/pthr... 目录1. 线程号2. 线程的创建3. 线程属性4. 线程的回收5. 线程的退出6. 线程的取消7.

创建Java keystore文件的完整指南及详细步骤

《创建Javakeystore文件的完整指南及详细步骤》本文详解Java中keystore的创建与配置,涵盖私钥管理、自签名与CA证书生成、SSL/TLS应用,强调安全存储及验证机制,确保通信加密和... 目录1. 秘密键(私钥)的理解与管理私钥的定义与重要性私钥的管理策略私钥的生成与存储2. 证书的创建与

Java设计模式---迭代器模式(Iterator)解读

《Java设计模式---迭代器模式(Iterator)解读》:本文主要介绍Java设计模式---迭代器模式(Iterator),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录1、迭代器(Iterator)1.1、结构1.2、常用方法1.3、本质1、解耦集合与遍历逻辑2、统一

Java 线程安全与 volatile与单例模式问题及解决方案

《Java线程安全与volatile与单例模式问题及解决方案》文章主要讲解线程安全问题的五个成因(调度随机、变量修改、非原子操作、内存可见性、指令重排序)及解决方案,强调使用volatile关键字... 目录什么是线程安全线程安全问题的产生与解决方案线程的调度是随机的多个线程对同一个变量进行修改线程的修改操

python如何创建等差数列

《python如何创建等差数列》:本文主要介绍python如何创建等差数列的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录python创建等差数列例题运行代码回车输出结果总结python创建等差数列import numpy as np x=int(in

怎么用idea创建一个SpringBoot项目

《怎么用idea创建一个SpringBoot项目》本文介绍了在IDEA中创建SpringBoot项目的步骤,包括环境准备(JDK1.8+、Maven3.2.5+)、使用SpringInitializr... 目录如何在idea中创建一个SpringBoot项目环境准备1.1打开IDEA,点击New新建一个项

如何使用Maven创建web目录结构

《如何使用Maven创建web目录结构》:本文主要介绍如何使用Maven创建web目录结构的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录创建web工程第一步第二步第三步第四步第五步第六步第七步总结创建web工程第一步js通过Maven骨架创pytho