首页 > 其他分享 >设计模式之Prototype模式

设计模式之Prototype模式

时间:2023-08-29 10:05:05浏览次数:34  
标签:include 设计模式 CConcretePrototype 模式 CPrototype 拷贝 Prototype Clone


关于这个模式,突然想到了小时候看的《西游记》,齐天大圣孙悟空再发飙的时候可以通过自己头上的3根毛立马复制出来成千上万的孙悟空,对付小妖怪很管用(数量最重要)。Prototype模式也正是提供了自我复制的功能,就是说新对象的创建可以通过已有对象进行创建。在C++中拷贝构造函数(Copy Constructor)曾经是很对程序员的噩梦,浅层拷贝和深层拷贝的魔魇也是很多程序员在面试时候的快餐和系统崩溃时候的根源之一。

Prototype模式提供了一个通过已存在对象进行新对象创建的接口(Clone),Clone()实现和具体的实现语言相关,在C++中我们将通过拷贝构造函数实现之。

Prototype.h

#ifndef __PROTOTYPE_H_
#define __PROTOTYPE_H_
class CPrototype
{
public:
	CPrototype();
	~CPrototype();
	virtual CPrototype* Clone()=0;
};
#endif

 

Prototype.cpp

#include "Prototype.h"
CPrototype::CPrototype()
{

}

CPrototype::~CPrototype()
{

}

ConcretePrototype.h

#ifndef _CONCRETEPROTOTYPE_H_
#define _CONCRETEPROTOTYPE_H_
#include "Prototype.h"
class CConcretePrototype:public CPrototype
{
public:
	CConcretePrototype();
	CConcretePrototype(CConcretePrototype* pCpro);
	~CConcretePrototype();
	CPrototype* Clone();
private:
	
};
#endif

ConcretePrototype.cpp

#include "ConcretePrototype.h"
#include <iostream>
using namespace std;
CConcretePrototype::CConcretePrototype()
{

}

CConcretePrototype::~CConcretePrototype()
{

}

CConcretePrototype::CConcretePrototype(CConcretePrototype* pCpro)
{
	cout<<"创建对象"<<endl;

}
CPrototype* CConcretePrototype::Clone()
{
	cout<<"开始克隆"<<endl;
	return new CConcretePrototype(this);
}

Main.cpp

#include <iostream>
#include "Prototype.h"
#include "ConcretePrototype.h"
using namespace std;
int main()
{
	CPrototype *pCP=new CConcretePrototype;
	pCP->Clone();
	delete pCP;
	return 0;
}

 

标签:include,设计模式,CConcretePrototype,模式,CPrototype,拷贝,Prototype,Clone
From: https://blog.51cto.com/u_13566975/7272474

相关文章

  • 设计模式之Factory模式
    在面向对象系统设计中经常可以遇到以下的两类问题:1)为了提高内聚(Cohesion)和松耦合(Coupling),我们经常会抽象出一些类的公共接口以形成抽象基类或者接口。这样我们可以通过声明一个指向基类的指针来指向实际的子类实现,达到了多态的目的。这里很容易出现的一个问题n多的子类继承自抽象......
  • 3.2.2 预览模式
    一、预览模式1.普通报表标签预览填报预览数据分析移动端预览2.决策报表PC端预览开发者调试移动端预览......
  • golang官方包管理vendor模式无法引用非go文件
    主页微信公众号:密码应用技术实战博客园首页:https://www.cnblogs.com/informatics/背景&问题golang作为高级计算机语言之一,在云原生以及web网站建设中发挥了重要作用,但在实际应用中我们可能会碰到以下场景,在该场景下:部署机无法访问外网,无法直接从互联网下载依赖包golang依......
  • 报名开启丨邀你一起探索云端 AI 新兴技术和发展模式
    在数字化和信息化的大潮中,大模型和AIGC正悄然引领一场深刻的变革,数字技术与各行各业深度融合,互联网企业遇到了业务高质量增长速度和成本过大的冲突,高质量发展变成企业转型的核心命题。云服务商通过智能托管,AI大模型为企业构建以AI内核驱动能力的产业应用,帮助企业数字化升级和......
  • 剖析网卡绑定模式
    目前网卡绑定mode共有七种(0~6)bond0、bond1、bond2、bond3、bond4、bond5、bond6常用的有三种:mode=0:平衡负载模式,有自动备援,但需要”Switch”支援及设定。mode=1:自动备援模式,其中一条线若断线,其他线路将会自动备援。mode=6:平衡负载模式,有自动备援,不必”Switch”支援及设定......
  • RTSP/Onvif协议安防视频平台EasyNVR录像模式自定义操作
    TSINGSEE青犀视频安防监控平台EasyNVR可支持设备通过RTSP/Onvif流媒体协议接入,并能对接入的视频流进行处理与多端分发,包括RTSP、RTMP、HTTP-FLV、WS-FLV、HLS、WebRTC等多种格式。在智慧安防等视频监控场景中,EasyNVR可提供视频实时监控直播、云端录像、云存储、录像检索与回看、告......
  • 让你的网站IE8浏览自动用IE7兼容模式
    文件兼容性用于定义让IE如何编译你的网页。此文件解释文件兼容性,如何指定你网站的文件兼容性模式以及如何判断一个网页该使用的文件模式。前言为了帮助确保你的网页在所有未来的IE版本都有一致的外观,IE8引入了文件兼容性。在IE6中引入一个增设的兼容性模式,文件兼容性使你能够在IE呈......
  • Java多线程-实现 生产者-消费者 模式
    多线程实现生产者消费者,堆积满100后停止生产,消费到小于50后继续生产这是一种写法,但是我觉得不太好:它通过循环创建了很多的线程,每个线程只消费/生产一次它使用notifyAll()通知所有的线程唤醒,包括生产者和消费者,感觉产品数量永远也达不到50publicclassProducerimpleme......
  • 三类代码协同模式,你要如何选?
    三类代码协同模式,Git大神告诉你到底如何选。Git代码协同模式基础为团队规划研发协同模式之前,有必要了解Git的几种协同模型。其中多种协同模型中使用了代码评审。代码评审在不同的代码平台有不同的称谓。GitHub应该是受到了git命令 gitrequest-pull的启发,将代码......
  • 设计模式——工厂模式
    ★★★原文链接★★★:https://subingwen.cn/design-patterns/factory/工厂模式简单工厂  工厂和对象的关系:一对多工厂模式  工厂和对象的关系:一对一示例:#include<iostream>usingnamespacestd;//产品类的父类-人造恶魔果实父类classAbstractSmile{public: v......