首页 > 其他 > 详细

创建型-原型模式

时间:2020-04-21 21:11:47      阅读:68      评论:0      收藏:0      [点我收藏+]

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

话不多说 上才艺

我们这里通过一个小案例来解释一下Prototype模式

 class Program
    {
        static void Main(string[] args)
        {
            //包子有一个小人 有红色衣服 绿色头发 黑色鞋子  123456根头发 很漂亮
            LittlePerson littlePersonBao = new LittlePerson() { ClothingColour="Red",  ShoeColour="Black", hair=new Hair { HairColour="Green", HairNumber=123456 } };
            littlePersonBao.GetLittlePersonInfo();


            //这时候跳跳看到了,道“我想要我想要白色衣服 绿色头发 黑色鞋子 的小人”(这时候我们创建重复对象的时候如果通过set方法一个一个copy属性值,这样如果类中属性特别多的话非常不好用,而且效率也不高。)
            LittlePerson littlePersonTiao = littlePersonBao.Clone();
            littlePersonTiao.ClothingColour = "white";
            littlePersonTiao.hair.HairNumber = 654321;
            littlePersonTiao.GetLittlePersonInfo();
            littlePersonBao.GetLittlePersonInfo();



        }
    }

    /// <summary>
    /// 是所有具体原型类的公共父类,它可是抽象类也可以是接口,甚至可以是具体实现类。
    /// </summary>
    public abstract class Prototype<T>
    {

        /// <summary>
        /// 提供副本
        /// </summary>
        /// <returns></returns>
        public abstract T Clone();
    }
    /// <summary>
    /// 小人类
    /// </summary>
    public class LittlePerson : Prototype<LittlePerson>
    {
        /// <summary>
        /// 衣服颜色
        /// </summary>
        public string ClothingColour { get; set; }
        /// <summary>
        /// 鞋子颜色
        /// </summary>
        public string ShoeColour { get; set; }
        public Hair  hair { get; set; }
        public override LittlePerson Clone()
        {
            //这里使用的是浅拷贝
            return  (LittlePerson)this.MemberwiseClone();
        }
        public void GetLittlePersonInfo()
        {
            Console.Write($"ClothingColour:{ClothingColour}    ");
            Console.Write($"ShoeColour:{ShoeColour}     ");
            Console.WriteLine($"HairColour:{hair.HairColour}    ");
            Console.WriteLine($"HairNumber:{hair.HairNumber}    ");




        }
    }
    public class Hair
    {
        /// <summary>
        /// 头发颜色
        /// </summary>
        public string HairColour { get; set; }
        /// <summary>
        /// 头发数量
        /// </summary>
        public int HairNumber { get; set; }

    }

这个案例采用的是浅拷贝的方式来拷贝复杂对象。

浅拷贝:将当前对象的非静态字段复制到新的对象,其引用类型的字段会复制引用,不会复制引用的对象,如果字段是值类型,则执行字段的逐位副本

通过这个案例我们可以看出,原型模式主要用于创建重复的对象,我们通常创建重复对象的时候都是通过set方法一个一个copy属性值的,这样如果类中属性特别多的话非常不好用,而且效率也不高。

创建型-原型模式

原文:https://www.cnblogs.com/Z-ba-S-wei-K/p/12747536.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!