• 原形模式


    原形模式

    第一次看到以为是原味模式。。,想歪了想歪了,原形模式指的用原形模式指定创建对象的种类,并且通过拷贝这些原型创建新的对象,所以原形是拷贝,
    不是原来指针的地址,所以让大家失望了,这不是原味。
    这里拿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();
            }
        }
    
  • 相关阅读:
    Cocos2d-js 开发记录:图片数据资源等的异步加载
    Cocos2d-js 开发记录:声音播放
    Cocos2d-js 开发记录-初始
    PAT 1064 Complete Binary Search Tree
    python 对象属性与 getattr & setattr
    LeetCode Text Justification
    LeetCode Valid Number
    LeetCode String to Integer (atoi)
    struts2--标签取值
    java--Hibernate实现分页查询
  • 原文地址:https://www.cnblogs.com/liuyang95/p/13372420.html
Copyright © 2020-2023  润新知