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

大话设计模式之原型模式

原型模式(Prototype Pattern)是一种创建型设计模式,它用于创建对象的复制,同时又能保持对象的封装。原型模式通过复制现有对象的方式来创建新的对象,而无需知道具体创建过程的细节。

在原型模式中,通常会有两种角色:

  1. 原型接口(Prototype Interface):声明了一个用于克隆自身的接口,这样所有具体原型类都必须实现该接口。

  2. 具体原型(Concrete Prototype):实现了原型接口,负责对自身进行克隆。

#include <iostream>
#include <string>// 原型接口
class Prototype {
public:virtual Prototype* clone() = 0;virtual void setProperty(const std::string& value) = 0;virtual std::string getProperty() const = 0;
};// 具体原型
class ConcretePrototype : public Prototype {
private:std::string property;public:Prototype* clone() override {ConcretePrototype* cloned = new ConcretePrototype();cloned->setProperty(this->property);return cloned;}void setProperty(const std::string& value) override {property = value;}std::string getProperty() const override {return property;}
};int main() {// 创建原型对象ConcretePrototype* original = new ConcretePrototype();original->setProperty("Original Property");// 克隆原型对象ConcretePrototype* cloned = dynamic_cast<ConcretePrototype*>(original->clone());// 修改克隆对象的属性cloned->setProperty("Cloned Property");// 输出属性值std::cout << "Original Property: " << original->getProperty() << std::endl;std::cout << "Cloned Property: " << cloned->getProperty() << std::endl;delete original;delete cloned;return 0;
}/*
在这个示例中,Prototype 是原型接口,ConcretePrototype 是具体原型类。通过原型模式,我们可以使用原型对象来克隆出新的对象,并且可以修改克隆对象的属性,而不影响原型对象本身。原型模式适用于需要创建大量相似对象且创建过程比较昂贵或复杂的情况。通过原型模式,我们可以通过复制已有对象来创建新对象,而无需重复执行创建过程的开销。*/

觉得有帮助的话,打赏一下呗。。

           

相关文章:

  • DevSecOps平台架构系列-微软云Azure DevSecOps平台架构
  • 主流后端开发语言:JAVA、C、C++、GO、PYTHON对比
  • 如何系统的学习 C#
  • C#使用iText7画发票PDF——字体与自定义颜色
  • 上位机图像处理和嵌入式模块部署(qmacvisual透视变换)
  • 优雅的使用ChromeDriver
  • 论文《Exploring to Prompt for Vision-Language Models》阅读
  • Linux小程序: 手写自己的shell
  • LabVIEW比例流量阀自动测试系统
  • Eclipse+Java+Swing实现斗地主游戏
  • 散热风扇220v交流12v直流12038轴流风机配电箱机柜散热风扇15050
  • Rust教程:How to Rust-基本类型
  • 探索数据库mysql--------------mysql主从复制和读写分离
  • 电脑关机速度很慢怎么解决?
  • L3-016 二叉搜索树的结构
  • ES6指北【2】—— 箭头函数
  • 【跃迁之路】【463天】刻意练习系列222(2018.05.14)
  • CoolViewPager:即刻刷新,自定义边缘效果颜色,双向自动循环,内置垂直切换效果,想要的都在这里...
  • create-react-app项目添加less配置
  • github从入门到放弃(1)
  • java正则表式的使用
  • Js基础知识(四) - js运行原理与机制
  • js正则,这点儿就够用了
  • Sass Day-01
  • TCP拥塞控制
  • 包装类对象
  • 动态魔术使用DBMS_SQL
  • 互联网大裁员:Java程序员失工作,焉知不能进ali?
  • 扫描识别控件Dynamic Web TWAIN v12.2发布,改进SSL证书
  • 算法-插入排序
  • 新版博客前端前瞻
  • 用element的upload组件实现多图片上传和压缩
  • media数据库操作,可以进行增删改查,实现回收站,隐私照片功能 SharedPreferences存储地址:
  • 好程序员大数据教程Hadoop全分布安装(非HA)
  • (附源码)springboot宠物医疗服务网站 毕业设计688413
  • (附源码)springboot人体健康检测微信小程序 毕业设计 012142
  • (剑指Offer)面试题41:和为s的连续正数序列
  • (九)c52学习之旅-定时器
  • (一)kafka实战——kafka源码编译启动
  • (一)SpringBoot3---尚硅谷总结
  • (转载)hibernate缓存
  • (转载)PyTorch代码规范最佳实践和样式指南
  • .axf 转化 .bin文件 的方法
  • .NET 5种线程安全集合
  • .NET Core Web APi类库如何内嵌运行?
  • .NET Core 成都线下面基会拉开序幕
  • .NET/ASP.NETMVC 深入剖析 Model元数据、HtmlHelper、自定义模板、模板的装饰者模式(二)...
  • .w文件怎么转成html文件,使用pandoc进行Word与Markdown文件转化
  • @RequestBody与@ModelAttribute
  • [ IOS ] iOS-控制器View的创建和生命周期
  • [ solr入门 ] - 利用solrJ进行检索
  • []常用AT命令解释()
  • [Angular] 笔记 7:模块
  • [Asp.net mvc]国际化
  • [ASP]青辰网络考试管理系统NES X3.5