【设计模式】——原型模式(Prototype)

创建型——原型模式(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();
            
        }

浅复制与深复制
浅复制:被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用都仍然指向原来的对象。
深复制:把引用对象的变量指向复制过的新对象,而不是原有的被引用的对象。

评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值