Tags标签 网战地图
当前位置: 主页 > 网页设计 > JavaScript >

Javascript玩转Prototype(一)——先谈C#原型模式

2014-06-09 21:56 [JavaScript] 来源于:
导读:在《 Javascript玩转继承(二) 》中,我使用了原型继承法来实现Javascript的继承,那原型究竟奥秘何在。在这篇文章中,我就主要针对原型来展开讨论。 抛开Java

在《》中,我使用了原型继承法来实现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;
 }
}

(编辑:)

本文标签:
网友评论

栏目列表

推荐文章