码迷,mamicode.com
首页 > 其他好文 > 详细

设计模式6:原型模式

时间:2014-10-20 16:39:21      阅读:132      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   io   os   sp   div   2014   

一、我的描述

  什么是原型模式,按我的理解就是对一个对象的N个克隆。克隆出来的东西应该是一模一样,当然你也可以修改你克隆出来的对象的内容。对C++来说,表现就是拷贝构造函数。这个模式比较简单,就不再罗嗦。

二、UML 图

  bubuko.com,布布扣

三、我的代码

#include<iostream>
using namespace std;
#include <string>

class WorkExperience {
public:
    WorkExperience(string n) : name(n) {}
    WorkExperience() {}
    void SetName(string n) { name = n;}
    string GetName() { return name; }

    void SetDate(string d) { date = d; }
    string GetDate() { return date; }

    void SetCompany (string c) { company = c; }
    string GetCompany() { return company; }
private:
    string name;
    string date;
    string company;
};

class Resume : public WorkExperience {
public:
    Resume (string n) : WorkExperience(n) {}
    Resume (Resume& r) {
        SetName(r.GetName());
        SetDate(r.GetDate());
        SetCompany(r.GetCompany());
    }
    Resume* Clone() { 
       return new Resume(*this); 
    }
};

int main()
{
    Resume *p_resume1 = new Resume("george");
    p_resume1->SetDate("2003");
    p_resume1->SetCompany("xxx");

    Resume *p_resume2 = p_resume1->Clone();
    p_resume2->SetDate("2004");
    p_resume2->SetCompany("yyy");

    cout << "Resume 1: " << p_resume1->GetName() << " " << p_resume1->GetDate() << " " << p_resume1->GetCompany() << endl;
    delete p_resume1;

    cout << "Resume 2: " << p_resume2->GetName() << " " << p_resume2->GetDate() << " " << p_resume2->GetCompany() << endl;
    delete p_resume2;
}

 

设计模式6:原型模式

标签:style   blog   http   color   io   os   sp   div   2014   

原文地址:http://www.cnblogs.com/457220157-FTD/p/4037305.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!