原型模式

淺拷貝是指當對象的字段值被拷貝時,字段引用的對象不會被拷貝。例如,若是一個對象有一個指向字符串的字段,而且咱們對該對象作了一個淺拷貝,那麼這兩個對象將引用同一個字符串,而深拷貝是對對象實例中字段引用的對象也進行拷貝,若是一個對象有一個指向字符串的字段,而且咱們對該對象進行了深拷貝的話,那麼咱們將建立一個對象和一個新的字符串,新的對象將引用新的字符串。也就是說,執行深拷貝建立的新對象和原來對象不會共享任何東西,改變一個對象對另一個對象沒有任何影響,而執行淺拷貝建立的新對象與原來對象共享成員,改變一個對象,另一個對象的成員也會改變。其實原型模式就是淺拷貝的一個應用。ide

///火影忍者中鳴人的影分身和孫悟空的的變都是原型模式
    class Client
    {
        static void Main(string[] args)
        {
            // 孫悟空 原型
            MonkeyKingPrototype prototypeMonkeyKing = new ConcretePrototype("MonkeyKing");
            // 變一個
            MonkeyKingPrototype cloneMonkeyKing = prototypeMonkeyKing.Clone() as ConcretePrototype;
            Console.WriteLine("Cloned1:\t"+cloneMonkeyKing.Id);
            // 變兩個
            MonkeyKingPrototype cloneMonkeyKing2 = prototypeMonkeyKing.Clone() as ConcretePrototype;
            Console.WriteLine("Cloned2:\t" + cloneMonkeyKing2.Id);
            Console.ReadLine();
        }
    }
    /// <summary>
    /// 孫悟空原型
    /// </summary>
    public  abstract class MonkeyKingPrototype
    {
        public string Id { get; set; }
        public MonkeyKingPrototype(string id)
        {
            this.Id = id;
        }
        // 克隆方法,即孫大聖說「變」
        public abstract MonkeyKingPrototype Clone();
    }
    /// <summary>
    /// 建立具體原型
    /// </summary>
    public class ConcretePrototype : MonkeyKingPrototype
    {
        public ConcretePrototype(string id)
            : base(id)
        { }
        /// <summary>
        /// 淺拷貝
        /// </summary>
        /// <returns></returns>
        public override MonkeyKingPrototype Clone()
        {
            // 調用MemberwiseClone方法實現的是淺拷貝,另外還有深拷貝
            return (MonkeyKingPrototype)this.MemberwiseClone();
        }
    }
實例代碼
相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息