第09章 简历复印--原型模式
9.2 简历代码初步实现
//简历
class Resume
{
private string name;
private string sex;
private string age;
private string timeAreas;
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);
}
}
客户端调用代码
static void Main(string[] args)
{
Resume a = new Resume(“大鸟”);
a.SetPersonalInfo(“男“,”29”);
a.SetWorkExplerience(“1998-2000”,”xx公司“);
Resume b = new Resume(“大鸟”);
b.SetPersonalInfo(“男“,”29”);
b.SetWorkExplerience(“1998-2000”,”xx公司“);
Resume c = new Resume(“大鸟”);
c.SetPersonalInfo(“男“,”29”);
c.SetWorkExplerience(“1998-2000”,”xx公司“);
a.Display();
b.Display();
c.Display();
Console.Read();
}
9.3 原型模式
原型模式(Prototype),用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
原型模式其实就是从一个对象再创建另外一个对象,而且不需要知道任何创建的细节。
原型类
abstract class Prototype
{
private string id;
public Prototype(string id)
{
this.id = id;
}
public string Id
{
get{ return id; }
}
public abstract Prototype Clone();
}
具体原型类
class ConcretePrototype1 : Prototype
{
public ConcretePrototype(string id) : base(id)
{
}
public override Prototype Clone()
{
return (Prototype) this.MemberwiseClone();
}
}
客户端代码
static void Main(string[] args)
{
ConcretePrototype1 p1 = new ConcretePrototype1(“I”);
ConcretePrototype1 c1 = (ConcretePrototype1)p1.Clone();
Console.WriteLine(“Cloned:{0}”, c1.Id);
Console.Read();
}
9.4 简历的原型实现
//简历
class Resume : 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 SetPersonlInfo(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();
}
}
客户端调用代码
static void Main(string[] args)
{
Resume a = new Resume(“大鸟“);
a.SetPersonalInfo(“男”,”29”);
a.SetWorkExperience(“1998-2006”,”XX公司”);
Resume b = (Resume)a.Clone();
b.SetWorkExperience(“1998-2006”,”YY企业”);
Resume c = (Resume)a.Clone();
c.SetPersonalInfo(“男”,”24”);
a.Display();
b.Display();
c.Display();
Console.Read();
}
9.5 浅复制与深复制
MemberwiseClone()方法是这样的:如果字段是值类型的,则该字段逐位复制,如果字段时引用类型,则复制引用但不复制应用的对象:因此,原始对象及其复本引用同一个对象。