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; }
        }
    }

  • 相关阅读:
    Simpo
    Numpy技巧
    流程图
    注册免费试用12个月的亚马逊AWS云计算服务
    java-Collection
    CoreGraphic
    吴裕雄--天生自然python学习笔记:python 用pygame模块开发俄罗斯方块游戏
    吴裕雄--天生自然python学习笔记:python 用pygame模块检测键盘事件和鼠标事件
    吴裕雄--天生自然python学习笔记:python 用pygame模块角色类(Sprite)移动与碰撞
    吴裕雄--天生自然python学习笔记:python 用pygame模块动画一让图片动起来
  • 原文地址:https://www.cnblogs.com/hnzheng/p/12688133.html
Copyright © 2011-2022 走看看