在《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;
}
}