• 设计模式6:原型模式


    一、我的描述

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

    二、UML 图

      

    三、我的代码

    #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;
    }
  • 相关阅读:
    组件化的使用
    MacOS 升级后pod 出现的问题
    协议(Protocol) 和代理(Delegate)
    分类(Category)的本质 及其与类扩展(Extension) /继承(Inherit)的区别
    KVC
    KVO的使用及底层实现
    OC对象的本质及分类
    大端小端
    为什么一个指针在32位系统中占4个字节,在64位系统中占8个字节?
    quarts之Cron表达式示例
  • 原文地址:https://www.cnblogs.com/457220157-FTD/p/4037305.html
Copyright © 2020-2023  润新知