zoukankan      html  css  js  c++  java
  • 原型模式(Prototype Pattern)

    一、介绍

      用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。Prototype原型模式是一种创建型设计模式,Prototype模式允许一个对象再创建另外一个可定制的对象,根本无需知道任何如何创建的细节,工作原理是:通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝它们自己来实施创建。

    二、UML图

    三、示例

    View Code
    public class Dog
        {
            /// <summary>
            /// 名称
            /// </summary>
            public string Name { get; set; }
            /// <summary>
            /// 行为
            /// </summary>
            public string Action { get; set; }
        }
        /// <summary>
        /// 浅拷贝
        /// </summary>
        public class ShallowClone : ICloneable
        {
    
            #region IClone 成员
            public ShallowClone(Dog model, string Tag)
            {
                this.DogModel = model;
                this.Tag = Tag;
            }
    
            public object Clone()
            {
                return this.MemberwiseClone();
              
            }
            public string Tag { get; set; }
            /// <summary>
            /// 实体属性
            /// </summary>
            public Dog DogModel { get; set; }
    
            #endregion
        }
        /// <summary>
        /// 深拷贝
        /// </summary>
        public class DeepClone : ICloneable
        {
            #region IClone 成员
            public DeepClone(Dog model, string tag)
            {
                this.DogModel = model;
                this.Tag = tag;
            }
            public object Clone()
            {
                return new DeepClone(new Dog { Name = DogModel.Name, Action = DogModel.Action },this.Tag);
               
            }
            public string Tag { get; set; }
            /// <summary>
            /// 实体属性
            /// </summary>
            public Dog DogModel { get; set; }
    
            #endregion
    
        }

    //program

    View Code
    static void Main(string[] args)
            {
    
                ShallowClone lowClone = new ShallowClone(new Dog { Name = "Dog", Action = "啃骨头" }, "浅拷贝");
                
                ShallowClone lowClone2 = (ShallowClone)lowClone.Clone();
                lowClone2.Tag = "浅拷贝克隆";
                lowClone2.DogModel.Name = "小狗";
    
    
                Console.WriteLine(lowClone.Tag+":"+ lowClone.DogModel.Name + lowClone.DogModel.Action);
                Console.WriteLine(lowClone2.Tag+":" + lowClone2.DogModel.Name + lowClone2.DogModel.Action);
    
    
    
                DeepClone deepClone = new DeepClone(new Dog { Name = "Dog", Action = "啃骨头" }, "深拷贝");
                DeepClone deepClone2 = (DeepClone)deepClone.Clone();
                deepClone2.Tag = "深拷贝克隆";
                deepClone2.DogModel.Name = "小狗";
                Console.WriteLine(deepClone.Tag + ":" + deepClone.DogModel.Name + deepClone.DogModel.Action);
                Console.WriteLine(deepClone2.Tag + ":" + deepClone2.DogModel.Name + deepClone2.DogModel.Action);
    
    
                Console.Read();
            }

    //运行结果

  • 相关阅读:
    c--日期和时间函数
    笔试题:360找镇长的题。
    【JavaScript】BOM和DOM
    也谈在 .NET 平台上使用 Scala 语言(续)
    生成n个元素的全排列 C实现
    jsp安全性问题
    stm32DMA通道 ADC通道
    POJ 1860
    Codeforces Round #FF (Div. 2) A. DZY Loves Hash
    Configure the modules to be find by modprobe
  • 原文地址:https://www.cnblogs.com/duandian/p/2511376.html
Copyright © 2011-2022 走看看