原形模式
第一次看到以为是原味模式。。,想歪了想歪了,原形模式指的用原形模式指定创建对象的种类,并且通过拷贝这些原型创建新的对象,所以原形是拷贝,
不是原来指针的地址,所以让大家失望了,这不是原味。
这里拿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();
}
}