创建型——原型模式(Prototype)
中国的四大名著之一——《西游记》中的孙悟空会七十二变,孙悟空经常和妖怪打打闹闹,有时候他想捉弄一下妖怪,变出来N个自己,这时候孙悟空都是一样的,他非常的聪明,知道变成来的自己都是一模一样的没有差别,如果这个时候孙悟空变出来的各模各样,那妖怪不久一下认出自己了吗?今天讲解的原型模式也是如此!接下来给大家进行详细的讲解咯。
定义:原型模式(Prototype)用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
(1)Prototype(抽象原型类):声明克隆方法的接口,是所有具体原型类的公共父类,它可是抽象类也可以是接口,甚至可以是具体实现类。
(2)ConcretePrototype(具体原型类):它实现抽象原型类中声明的克隆方法,在克隆方法中返回自己的一个克隆对象。
(3)Client(客户端):在客户类中,让一个原型对象克隆自身从而创建一个新的对象。
在这里我们要求职面试要用多分简历该怎么弄呢?代码实现
class Resume : ICloneable //对象复制接口ICloneable
{
private string name;
private string sex;
private string age;
private string timeArea;
private string company;
public Resume(string name)
{
this.name = name;
}
//个人信息
public void SetPersonalInfo(string sex, string age)
{
this.sex = sex;
this.age = age;
}
//个人工作经历
public void SetWorkExperience(string timeArea, String company)
{
this.timeArea = timeArea;
this.company =company ;
}
//显示内容
public void Display()
{
Console.WriteLine("{0}{1}{2}", name, sex, age);
Console.WriteLine("工作经历:{0}{1}", timeArea, company);//实现接口的方法,用来克隆对象
}
public object Clone()
{
return (object)this.MemberwiseClone();
}
}
客户端代码
class Program
{
static void Main(string[] args)
{
Resume a = new Resume("大鸟");
a.SetPersonalInfo("男", "29");
a.SetWorkExperience("1998-2000", "yy企业");
//调用Clone方法就可以实现新简历的生成,并可以修改新简历的细节
Resume b = (Resume)a.Clone();
b.SetPersonalInfo("1998-2006", "xx公司");
Resume c=(Resume )a.Clone ();
c.SetPersonalInfo("男", "24");
a.Display();
b.Display();
c.Display();
Console.Read();
}
浅复制与深复制
浅复制:被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用都仍然指向原来的对象。
深复制:把引用对象的变量指向复制过的新对象,而不是原有的被引用的对象。