一,原型模式:通过将一个原型东西传给阿谁要策动创建的东西,这个要策动创建的东西通过请求原型东西拷贝它们本身来实施创建。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Diagnostics; namespace _5.原型模式 { //原型模式:通过将一个原型东西传给阿谁要策动创建的东西,这个要策动创建的东西通过请求原型东西拷贝它们本身来实施创建。 //它主要面对的问题是:“某些布局庞大的东西”的创建事情;由于需求的变革,这些东西经常面临着剧烈的变革,但是他们却拥有对照不变一致的接口。 class Program { public static int MAX_COUNT = 100000; static void Main(string[] args) { //使用克隆措施执行时间 Stopwatch st = new Stopwatch(); st.Start(); Mail m = new Mail("xxx公司发送邮件"); for (int i = 0; i < MAX_COUNT; i++) { Mail m2 = m.Clone(); m2.Content = i + " 先生(女士) "; SendMail(m2); } st.Stop(); Console.WriteLine("使用克隆措施执行时间:" + st.Elapsed); //不使用克隆措施执行时间 Stopwatch st2 = new Stopwatch(); st2.Start(); for (int i = 0; i < MAX_COUNT; i++) { Mail m3 = new Mail("xxx公司发送邮件"); m3.Content = i + " 先生(女士) "; SendMail(m3); } st2.Stop(); Console.WriteLine("不使用克隆措施执行时间:" + st2.Elapsed); Console.ReadKey(); } public static void SendMail(Mail m) { //Console.WriteLine(m.Title + m.Content); } } public class Mail { private string _title; public Mail(string title) { this._title = title; Add(); } public void Add() { for (int i = 0; i < 100; i++) { var a = i; } } public string Title { get { return _title; } } public string Content { get; set; } public Mail Clone() { return (Mail)this.MemberwiseClone(); } } }
二,执行功效
三,,原型模式:“某些布局庞大的东西”的创建事情;由于需求的变革,这些东西经常面临着剧烈的变革,但是他们却拥有对照不变一致的接口。
1》庞大东西的指的是当创建该东西消耗资源过多
2》面临的剧烈变革,好比发邮件,我们需要发N条,但是这N条邮件的东西每小我私家发送的信息也差别,所以导致实力出的的东西的也不完全一样
3》不变的接口值得是都是通过同一个要领将该东西发送出去,既是挪用要领一般不存在变革,而是东西转变
四,在什么情况下该选择原型模式?
1》是类初始化需要消化非常多的资源,这个资源包孕数据、硬件资源等,如上功效所示,我们在初始化时消耗过多资源,这是就浮现出原型模式的优势
2》是通过 new 孕育产生一个东西需要非常繁琐的数据筹备或访谒权限,则可以使用原型模式
五,原型模式的浅度克隆和深度克隆是什么意思?
1》浅度复制(Shallow Copy):将本来东西中的所有字段逐个复制到一个新东西,如果字段是值类型,则简单地复制一个副本到新东西,转变新东西的值类型字段不会影响原东西;如果字段是引用类型,则复制的是引用,转变方针东西中引用类型字段的值将会影响原东西。
2》深度复制(Deep Copy):与浅复制差别之处在于对引用类型的措置惩罚惩罚,深复制将新东西中引用类型字段指向复制过的新东西,转变新东西中引用的任何东西,不会影响到本来的东西中对应字段的内容。