zoukankan      html  css  js  c++  java
  • 原型模式(MemberwiseClone)

    using System;
    
    namespace 原型模式
    {
        class Program
        {
            static void Main(string[] args)
            {
                // 使用静态构造对象(和单例相似)
                {
                    System.Diagnostics.Stopwatch stopwatch = new System.Diagnostics.Stopwatch();
                    stopwatch.Start();
    
                    Sample sample1 = Sample.CreateStaticSample();
                    Sample sample2 = Sample.CreateStaticSample();
                    sample1.Name = "3333";
                    stopwatch.Stop();
                    Console.WriteLine($"sample1:{sample1.Name}__sample2:{sample2.Name}__ 共经历时间{stopwatch.ElapsedMilliseconds}__ 注意:这里两个对象的值相同,都发生了改变,说明操作的是同一个对象");
    
                }
                {
                     // 使用原型模式构造对象
                    // 监听执行时间
                    System.Diagnostics.Stopwatch stopwatch = new System.Diagnostics.Stopwatch();
                    stopwatch.Start();
                    Sample sample1 = Sample.CreateSample();
                    Sample sample2 = Sample.CreateSample();
                    sample1.Name = "44444444";  
                    stopwatch.Stop();
                    // 这里只有sample1 的值发生改变,说明sample1 和sample2 不是同一个对象
                    Console.WriteLine($"sample1:{sample1.Name}__sample2:{sample2.Name}__ 共经历时间{stopwatch.ElapsedMilliseconds}——注意:这里的对象值发生了改变,说明创建了一个新的对象");
    
                }
    
                Console.ReadLine();
            }
        }
    
    
        public class Sample
        {
    
            private static Sample _sample = null;
            static Sample()
            {
                _sample = new Sample();
            }
            public static Sample CreateStaticSample()
            {
                return _sample;
            }
            public static Sample CreateSample()
            {
                
                // 直接拷贝一个对象,这里深拷贝,直接复制一个新的对象,如果该类里面有其他对象,只会拷贝其他对象的引用地址,不会创建新对象,比如该类
                return (Sample)_sample.MemberwiseClone();
            }
            public Sample()
            {
                for (var i = 0; i < 5; i++)
                {
                    // 模拟进程休眠1秒
                    System.Threading.Thread.Sleep(1000);
                    this.Name = "制定项目管理计划";
                    this.Age = 11;
                    Console.WriteLine($"创建对象第{i}");
                }
            }
            public string Name { get; set; }
    
            public int Age { get; set; }
        }
    }

  • 相关阅读:
    第二十三讲:访问者模式
    第二十二讲:备忘录模式
    第二十讲:迭代模式
    第十九讲:职责链模式
    第十八讲:中介者模式
    UTC时间、GMT时间、本地时间、Unix时间戳
    【基础】SQL Server系统库的作用
    【基础】SQL Server系统库的作用
    【基础】SQL Server系统库的作用
    【收集】C#一些基础的面试题
  • 原文地址:https://www.cnblogs.com/hnzheng/p/12688133.html
Copyright © 2011-2022 走看看