C#设计模式:原型模式(Prototype Pattern)
2021-02-12 09:18
一,原型模式:通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝它们自己来实施创建。
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 ) { 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 ) { 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):与浅复制不同之处在于对引用类型的处理,深复制将新对象中引用类型字段指向复制过的新对象,改变新对象中引用的任何对象,不会影响到原来的对象中对应字段的内容。
文章标题:C#设计模式:原型模式(Prototype Pattern)
文章链接:http://soscw.com/index.php/essay/54402.html