设计模式----原型模式

        原型模式,听名字就知道是原来的模样,哈哈,其实这个模式就是用来复制对象用的,好了,废话不多说,我们直接看代码吧

abstract class Prototype
    {
        private string id;
        public Prototype(string id)
        {
            this.id = id;
        }

        public string Id
        {
            get { return id; }
        }
        public abstract Prototype Clone();
    }

        我们创建了一个抽象类Prototype类,这个类中最重要的一个方法Clone,我们可以看到它的返回参数就是它自己,然后我们来实现吧

class ConcretePrototype1 : Prototype
    {
        public ConcretePrototype1(string id) : base(id)
        {

        }

        public override Prototype Clone()
        {
            //创建当前对象的浅表副本。
            return (Prototype)this.MemberwiseClone();
        }
    }

        ConcretePrototype1类重写Clone方法,然后我们可以看到它方法体中调用了MemberwiseClone方法,这个方法是object对象提供的方法,注释是浅表复制,何为浅表复制,我们后面会讲到,这里就是返回我们Concerteprototype1对象的浅表对象,然后隐私转换为Prototype,最后返回,这就是我们的原型模式了,我们看看上端调用

class Program
    {
       
        static void Main(string[] args)
        {
            ConcretePrototype1 p1 = new ConcretePrototype1("I");
            ConcretePrototype1 c1 = (ConcretePrototype1)p1.Clone();
            Console.WriteLine("Clone:{0}", c1.Id);
            Console.Read();
        }
    }

        首先我们创建一个ConcretePrototype1类型对象p1,然后取名为I,然后我们通过Clone方法创建C1,这一步就是复制p1对象,然后赋值给c1,最后打印就是Clone:I 

        好了,原型模式就是这样。。。,现在让我们来解释下浅复制吧,其实还有一种复制就是深复制,我们都知道,在C#中只有两种类型,就是值类型和引用类型,所谓的浅复制呢就是对于引用类型来说的,因为对于值类型来说是没有浅复制的;浅复制就是只保存对象的地址,只开辟用来存储地址的内存;深复制就是相当于new一个对象,会开辟新的内存空间,两者的内存地址不同;大多数时候也叫做浅拷贝和深拷贝

        原型模式:使用原型实例指定创建对象的种类,并且通过克隆这些原型创建新的对象。

        浅拷贝:只复制指向某个对象的指针,而不复制对象本身,新旧对象还是共享同一块内存。

        深拷贝:创造一个一模一样的对象,新对象跟原对象不共享内存,修改新对象不会改到原对象。

posted @ 2019-05-19 16:30  守望阳光01  阅读(115)  评论(0编辑  收藏  举报