C#設計模式:原型模式(Prototype Pattern)

來源:互聯網
上載者:User

標籤:copy   自己   類型   end   str   []   sys   調用   參考型別   

一,原型模式:通過將一個原型對象傳給那個要發動建立的對象,這個要發動建立的對象通過請求原型對象拷貝它們自己來實施建立。

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):與淺複製不同之處在於對參考型別的處理,深複製將新對象中參考型別欄位指向複製過的新對象,改變新對象中引用的任何對象,不會影響到原來的對象中對應欄位的內容。

C#設計模式:原型模式(Prototype Pattern)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.