当前位置: 首页 > news >正文

C++设计模式-原型(Prototype)

目录

C++设计模式-原型(Prototype)

一、意图

二、适用性

三、结构

四、参与者

五、代码


C++设计模式-原型(Prototype)

一、意图

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

二、适用性

  • 当要实例化的类是在运行时刻指定时,例如,通过动态装载;或者
  • 为了避免创建一个与产品类层次平行的工厂类层次时;或者
  • 当一个类的实例只能有几个不同状态组合中的一种时。建立相应数目的原型并克隆它们可能比每次用合适的状态手工实例化该类更方便一些。

三、结构

 

四、参与者

  • Prototype

       声明一个克隆自身的接口。

  • ConcretePrototype

        实现一个克隆自身的操作。

  • Client

        让一个原型克隆自身从而创建一个新的对象。

五、代码

#include<iostream>
using namespace std;class Product {
public:virtual Product* Clone() = 0;virtual void Display() = 0;
};class ConcreteProduct : public Product {
public:ConcreteProduct(){}ConcreteProduct(string TempName, string TempID) : name(TempName), id(TempID){}void SetName(string TempName) {this->name = TempName;}void SetID(string TempID) {this->id = TempID;}ConcreteProduct* Clone() {return new ConcreteProduct(this->name, this->id);}void Display() {cout << "Name: " << this->name << endl;cout << "ID: " << this->id << endl;}
private:string name;string id;
};int main() {ConcreteProduct* originalProduct = new ConcreteProduct("Product One", "1");cout << "Original Product Information:" << endl;originalProduct->Display();ConcreteProduct* copyProduct = originalProduct->Clone();cout << "Copy Product Information Unchanged:" << endl;copyProduct->Display();copyProduct->SetName("Product Two");copyProduct->SetID("2");cout << "Copy Product Information Changed:" << endl;copyProduct->Display();}

http://www.lryc.cn/news/183292.html

相关文章:

  • [补题记录] Atcoder Beginner Contest 322(E)
  • 目标检测算法改进系列之Backbone替换为FocalNet
  • buuctf-[BSidesCF 2020]Had a bad day 文件包含
  • Elasticsearch:什么时候应该考虑在 Elasticsearch 中添加协调节点?
  • Dubbo3应用开发—Dubbo注册中心引言
  • AS环境,版本问题,android开发布局知识
  • OpenCV查找和绘制轮廓:findContours和drawContours
  • 毕设-原创医疗预约挂号平台分享
  • PLL锁相环倍频原理
  • POJ 2886 Who Gets the Most Candies? 树状数组+二分
  • 阿里云服务器镜像系统Anolis OS龙蜥详细介绍
  • 数学建模Matlab之基础操作
  • [计算机入门] Windows附件程序介绍(工具类)
  • 队列(循环数组队列,用队列实现栈,用栈实现队列)
  • 卷积神经网络-池化层和激活层
  • API基础————包
  • 【C++】一文带你走入vector
  • 《Secure Analytics-Federated Learning and Secure Aggregation》论文阅读
  • 十三、Django之添加用户(原始方法实现)
  • Elasticsearch数据操作原理
  • gitgitHub
  • 十天学完基础数据结构-第九天(堆(Heap))
  • vertx的学习总结7之用kotlin 与vertx搞一个简单的http
  • golang学习笔记(二):链路追踪
  • git提交代码实际操作
  • TF坐标变换
  • 如何进行网络编程和套接字操作?
  • 在Spark中集成和使用Hudi
  • 力扣第226翻转二叉数 c++三种方法 +注释
  • React项目部署 - Nginx配置