设计模式-原型模式

原型模式(Prototype):用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。

原型模式的clone()函数,对于c++来说其实就是拷贝构造函数,要注意是否需要深拷贝。
例子:在制作简历的时候我们会先制作一份模板,然后在复印这份模板,但是针对不同的公司侧重点可能不同,因此需要对简历的某些地方进行修改。

UML:
这里写图片描述

//工作经历
class WorkExperice {
private:
    string m_date;
    string m_company;
public:
    string GetDate()
    {
        return m_date;
    }
    void SetDate(string date)
    {
        m_date = date;
    }
    string GetCompany()
    {
        return m_company;
    }
    void SetCompany(string company)
    {
        m_company = company;
    }
};
//简历
class Resume {
private:
    string m_name;
    WorkExperice *work;
public:
    Resume(string name) 
    {
        work = new WorkExperice();
        m_name = name;
    }
    Resume(const Resume &R)   //拷贝构造函数
    {
        m_name = R.m_name;
        //work = R.work;                 //浅拷贝,同一个对象,修改后都会改变
        WorkExperice *temp = new WorkExperice();  //深拷贝
        work = temp;
    }
    void SetWorkExperice(string date, string company)
    {
        work->SetDate(date);
        work->SetCompany(company);
    }
    void show()
    {
        cout << m_name << work->GetDate() << work->GetCompany()<<endl;
    }
    Resume* clone()                   //相当于执行拷贝构造函数的工作
    {
        return new Resume(*this);
    }
};

int main()
{
    Resume *A = new Resume("yu");
    A->SetWorkExperice("20","CompanyA");
    Resume *B = A->clone();
    B->SetWorkExperice("21", "CompanyB");
    A->show(); B->show();    //修改B不会影响A
    system("pause");
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值