zoukankan      html  css  js  c++  java
  • 原形模式

    原形模式

    第一次看到以为是原味模式。。,想歪了想歪了,原形模式指的用原形模式指定创建对象的种类,并且通过拷贝这些原型创建新的对象,所以原形是拷贝,
    不是原来指针的地址,所以让大家失望了,这不是原味。
    这里拿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();
            }
        }
    
  • 相关阅读:
    安卓查询当前所在地天气及查询地区(城市)代码cityCode localCode
    文件读写IO
    【桌面虚拟化】之三 Persistent vs NonP
    Android软件开发之常用系统控件界面整理
    Spring 3.x企业应用开发实战(11)----基于@AspectJ配置切面
    Java之Static静态修饰符详解
    OWASP
    2001中美黑客大战
    能"干掉"苹果的中国"黑客"
    Roy Li的学习和成长自传
  • 原文地址:https://www.cnblogs.com/liuyang95/p/13372420.html
Copyright © 2011-2022 走看看