在《Javascript玩转继承(二)》中,我使用了原型继承法来实现Javascript的继承,那原型究竟奥秘何在。在这篇文章中,我就主要针对原型来展开讨论。
抛开Javascript,我们先来看我们熟悉的常规的面向对象语言。在23种设计模式中,大家一定会记得有一种设计模式——原型模式。我们先来看一下结构图:
(原图引自:http://terrylee.cnblogs.com/archive/2006/01/16/317896.html)
先来复习一下原型模式:看到这个图,大家一定会注意到这个千千万万的Clone()方法,这个就是原型模式的核心。原型模式就是用原型实例来创建对象的种类,然后通过拷贝这些原型来创建新的对象。
在.NET中,这个模式的实现很容易,我们只需要实现ICloneable接口:
我还记得在爱情左灯右行里那个Angel说了这样一句话,任何东西到了批量生产的时候,这个质量就得不到保证了。这个是典型的原型模式:批量生产。为什么质量会下降呢?原因就在于他是采用的复制。
看代码:
class People:ICloneable
{
private string name;
private int age;
private List<string> friends = new List<string>();
public People(string name,int age,params string[] names)
{
this.name=name;
this.age=age;
foreach (string s in names)
{
friends.Add(s);
}
}
public string Name
{
get{return name;}
set{name=value;}
}
public int Age
{
get{return age;}
set{age=value;}
}
public List<string> Friends
{
get { return friends; }
set { friends = value; }
}
public object Clone()
{
return this.MemberwiseClone();
}
public override string ToString()
{
string ret = "name:"+name+" age:"+age+" friends: ";
foreach (string s in friends)
{
ret += s + ",";
}
return ret;
}
}