Administrator
发布于 2024-07-31 / 18 阅读
0
0

原型模式

问题描述

设想我们需要给不同时间点的自己写三份简历,此时姓名和性别不变,只有年龄和工作经历有变化。 现在给出这三份简历。

代码实现

工作经历类

class WorkExperience:ICloneable
{
    public string WorkData { get;set; }
    public string Company { get; set; }

    public Object Clone()
    {
        return (Object)this.MemberwiseClone();
    }
}

简历类

class Resume : ICloneable
{
    private string mName;
    private string mSex;
    private string mAge;

    private WorkExperience mWork;

    public Resume(string name)
    {
        mName = name;
        mWork = new WorkExperience();
    }
    private Resume(WorkExperience work)
    {
        mWork = work.Clone() as WorkExperience;
    }

    public void SetPersonalInfo(string sex,string age)
    {
        mSex = sex;
        mAge = age;
    }

    public void SetWorkExperience(string workData,string company)
    {
        mWork.WorkData = workData;
        mWork.Company = company;
    }

    public void Display()
    {
        Console.WriteLine($"{mName} {mSex} {mAge}");
        Console.WriteLine($"工作经历:{mWork.WorkData} {mWork.Company}");
    }

    public Object Clone()
    {
        Resume obj = new Resume(mWork);
        obj.mName = mName;
        obj.mSex = mSex;
        obj.mAge = mAge;
        return obj;
    }
    
}

客户端调用

    class Program
    {
        static void Main(string[] args)
        {
            Resume resume = new Resume("大鸟");
            resume.SetPersonalInfo("男", "28");
            resume.SetWorkExperience("2019-2024", "h3d");

            Resume resume1 = resume.Clone() as Resume;
            resume1.SetWorkExperience("2025-2026", "bd");

            Resume resume2 = resume.Clone() as Resume;
            resume2.SetWorkExperience("2027-2030", "tx");

            resume.Display();
            resume1.Display();
            resume2.Display();

        }
    }

执行结果:

大鸟 男 28
工作经历:2019-2024 h3d
大鸟 男 28
工作经历:2025-2026 bd
大鸟 男 28
工作经历:2027-2030 tx

UML图


评论