zoukankan      html  css  js  c++  java
  • 设计模式----原型模式

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

    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一个对象,会开辟新的内存空间,两者的内存地址不同;大多数时候也叫做浅拷贝和深拷贝

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

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

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

  • 相关阅读:
    从零开始写STL-容器-双端队列
    JVM 总结
    从零开始写STL-容器-list
    从零开始写STL—容器—vector
    Web 后端编程的几个关键点(总结中...)
    Java Web 总结
    Spring实战读书笔记
    MSDN 同步部分 个人笔记
    洛谷 P3391【模板】文艺平衡树(Splay)
    洛谷 P1503 鬼子进村
  • 原文地址:https://www.cnblogs.com/liuhuimh/p/10889707.html
Copyright © 2011-2022 走看看