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; }
}
}
![]()