浅谈设计模式之三——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
原创粉丝点击