浅谈设计模式之三——Prototype模式
来源:互联网 发布:win7网络控制器有叹号 编辑:程序博客网 时间:2024/05/16 14:07
prototype模式即原型模式,同样先上uml图:
uml解析:原型模式讲的是什么呢?原型模式讲的其实就是浅拷贝跟深拷贝的问题。什么是浅拷贝什么是深拷贝呢,相信学过c++的都懂。凡涉及到一个类中的成员变量有指针的,一定会设计到深浅拷贝问题。浅拷贝只是简单的复制指针的值,而没有复制指针的内容,这样在使用以及析构的时候往往会出现问题。一般是要实现拷贝构造函数,重载“=”操作符以及析构等。
下面给出可执行的代码:
Prototype.h
#pragma once#include <iostream>using namespace std;class Prototype{public: Prototype(void); virtual ~Prototype(void);};class ConcrectPrototype:public Prototype{public: ConcrectPrototype(); ConcrectPrototype(int &p,int &q); ConcrectPrototype(const ConcrectPrototype &p); ConcrectPrototype & operator = (const ConcrectPrototype &p); ~ConcrectPrototype(); void showP();private: int * m_p; int m_q;};
Prototype.cpp
#include "Prototype.h"Prototype::Prototype(void){}Prototype::~Prototype(void){}ConcrectPrototype::ConcrectPrototype(){}ConcrectPrototype::ConcrectPrototype(int &m_p,int &m_q){ this->m_p = new int(m_p); this->m_q = m_q;}ConcrectPrototype::ConcrectPrototype(const ConcrectPrototype& p){ m_q = p.m_q; m_p = new int(*p.m_p);}ConcrectPrototype & ConcrectPrototype::operator = (const ConcrectPrototype & p){ m_q = p.m_q; m_p = new int(*p.m_p); return *this;}ConcrectPrototype::~ConcrectPrototype(){ if(m_p!=NULL) delete m_p; }void ConcrectPrototype::showP(){ cout<<m_p<<":"<<*m_p<<endl;}
main.cpp
#include "Prototype.h"int main(int argc,char ** argv){ int p=3,q=1; ConcrectPrototype p1(p,q); ConcrectPrototype p2; p2=p1; //output p1、p2 p1.showP(); p2.showP(); return 0;}
执行之后的结果:
可以看到输出的地址是不一样的,因为是深拷贝。这就是原型模式。
0 0
- 浅谈设计模式之三——Prototype模式
- 浅谈JAVA设计模式之——原型模式(Prototype)
- 设计模式之Prototype
- 设计模式之Prototype
- 设计模式之Prototype
- 设计模式之Prototype
- 设计模式之Prototype
- 设计模式之 prototype
- 设计模式之prototype
- 设计模式7—Prototype设计模式
- 设计模式之——Prototype Pattern(原型模式)
- 设计模式精解之——Prototype模式
- C++设计模式之 —— 原型模式 Prototype
- 设计模式之对象创建型 — prototype 原型模式
- 设计模式之Prototype模式
- 设计模式之Prototype模式
- 设计模式之(三)--原型模式(prototype)
- 设计模式之三 原型模式(Prototype)
- Android 的NoClassDefFoundError
- 将py文件打包成exe的三种工具方法
- 字典树
- 使用EventBus来实现数据的传递
- Android获取摄像头视频帧并实时处理(转载)
- 浅谈设计模式之三——Prototype模式
- Web开发中需要了解的东西
- Eclipse环境配置
- Spring 3.2.* MVC通过Ajax获取JSON数据报406错误
- 处理android studio有时会莫名奇妙无法使用的问题
- python nltk 基本操作
- OAI Kernel Requirements
- ImageView的scaletype属性 总结
- C#中将以0x开头的16进制字符串转换成对应的整数