原型模式
一个简历类,一个工作经历类。简历引用了工作经历,控制台输出简历内容。
1.
/// <summary>
/// 工作经历
/// </summary>
public class WorkExperience : ICloneable
{
public string WorkDate { get; set; }
public string Company { get; set; }
public object Clone()
{
return (object)this.MemberwiseClone();
}
}
2.
/// <summary>
/// 简历
/// </summary>
public class Resume : ICloneable
{
public string Name { get; set; }
public string Age { get; set; }
public string Sex { get; set; }
public WorkExperience WorkExperience { get; set; }
public Resume(string name)
{
Name = name;
WorkExperience = new WorkExperience();
}
//构造函数里克隆工作经历
public Resume(WorkExperience work)
{
WorkExperience = (WorkExperience)work.Clone();
}
//设置个人信息
public void SetPersonalInfo(string age,string sex)
{
Age = age;
Sex = sex;
}
//设置工作经历
public void SetWorkExperience(string workDate,string company)
{
WorkExperience.WorkDate = workDate;
WorkExperience.Company = company;
}
//显示
public void Display()
{
Console.WriteLine("{0} {1} {2}",Name,Sex,Age);
Console.WriteLine("工作经历:{0},{1}",WorkExperience.WorkDate,WorkExperience.Company);
}
public object Clone()
{
Resume obj = new Resume(this.WorkExperience);
obj.Name = this.Name;
obj.Age = this.Age;
obj.Sex = this.Sex;
return obj;
}
}
3.
class Program
{
static void Main(string[] args)
{
Resume a = new Resume("小红");
a.SetPersonalInfo("18", "女");
a.SetWorkExperience("2017-11-1", "华为");
Resume b = (Resume)a.Clone();
Resume c = (Resume)a.Clone();
c.SetWorkExperience("2017-10-1", "苹果");
a.Display();
b.Display();
c.Display();
Console.Read();
}
}
如果工作经历类不实现ICloneable接口,那么克隆简历的时候,只能实现浅表复制,引用类型的工作经历是不能复制数据的,只能复制引用,也就是所有的工作经历都会指向同一个对象。
而深表复制,是把引用对象的变量指向复制过后的新对象,而不是原有的被引用的对象。
数据集对象DateSet,它有Clone()方法和Copy()方法,Clone()用来复制DateSet的结构,但不复制其数据,这是原型模式中的浅表复制。Copy()方法既复制了结构,又复制了数据,实现了深表复制。

浙公网安备 33010602011771号