大话设计模式-第09章 简历复印--原型模式

来源:互联网 发布:手机qq当前网络不可用 编辑:程序博客网 时间:2024/06/05 06:14

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),用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。

9.3 原型模式.tiff


原型模式其实就是从一个对象再创建另外一个对象,而且不需要知道任何创建的细节。

原型类

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(“工作经历:{01, 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()方法是这样的:如果字段是值类型的,则该字段逐位复制,如果字段时引用类型,则复制引用但不复制应用的对象:因此,原始对象及其复本引用同一个对象。

0 0
原创粉丝点击