原型模式(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; } } }