C#设计模式:原型模式(Prototype Pattern)

2021-02-12 09:18

阅读:563

一,原型模式:通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝它们自己来实施创建。

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):与浅复制不同之处在于对引用类型的处理,深复制将新对象中引用类型字段指向复制过的新对象,改变新对象中引用的任何对象,不会影响到原来的对象中对应字段的内容。


评论


亲,登录后才可以留言!