原形模式

原形模式

第一次看到以为是原味模式。。,想歪了想歪了,原形模式指的用原形模式指定创建对象的种类,并且通过拷贝这些原型创建新的对象,所以原形是拷贝,
不是原来指针的地址,所以让大家失望了,这不是原味。
这里拿jay喝奶茶举例子
奶茶:

    class MilkTea
    {
        public string Type { get; set; }
        public Boolean IsIce { get; set; }
    }

jay买了奶茶,你是他的fans也要和他一样的

    class User
    {
        public void BuyMilkTea() 
        {
            //jay的奶茶
            MilkTea milkTeaOfJay = new MilkTea();
            milkTeaOfJay.Type = "优乐美";
            milkTeaOfJay.IsIce = true;

            //你的奶茶
            MilkTea milkTeaOfYou = milkTeaOfJay;
        }
    }

上面的做法是错误的,上面的做法就好比,jay买了杯带冰的优乐美,刚嘬一口,你一管子插上去,和jay一起喝。。
如何避免上面尴尬的形式呢,就需要和口味一样的奶茶,而不是他手上的奶茶
修改:

    class User2
    {
        public void BuyMilkTea() 
        {
            //jay的奶茶
            MilkTea milkTeaOfJay = new MilkTea();
            milkTeaOfJay.Type = "优乐美";
            milkTeaOfJay.IsIce = true;
            //你的奶茶
            MilkTea milkTeaOfYou = new MilkTea();
            milkTeaOfYou.Type = "优乐美";
            milkTeaOfYou.IsIce = true;
        }
    }

这个才像个正常人的做法,jay买了奶茶,你和卖奶茶的小姐姐说我也要带冰的优乐美
但是,后面突然来了一群人,都要jay同款的奶茶,虽然卖奶茶的小姐姐知道奶茶的类型
但是按上面模式,需要每个人都说一遍,所以这种方法并不好。

现在可以引出这次我们采取的措施原味模式,哦...不!原型模式
在奶茶的定义中添加:

    class MilkTea
    {
        public string Type { get; set; }
        public Boolean IsIce { get; set; }

        public MilkTea clone() 
        {
            MilkTea milkTea = new MilkTea();
            milkTea.Type = this.Type;
            milkTea.IsIce = this.IsIce;
            return milkTea;
        }
    }

usr3

 class User3
    {
        public void BuyMilkTea() 
        {
            //jay的奶茶
            MilkTea milkTeaOfJay = new MilkTea();
            milkTeaOfJay.Type = "优乐美";
            milkTeaOfJay.IsIce = true;
            //copy忍者上线
            //这个奶茶是个新的并不是jay手上的
            MilkTea milkTeaOfYou = milkTeaOfJay.clone();
        }
    }
原文地址:https://www.cnblogs.com/liuyang95/p/13372420.html