Javascript玩转Prototype(一)――先谈C#原型模式 - 面向对象网,web开发,Prototype,学习,对象 - 面向对象技术开发

面向对象技术开发

会员投稿 投稿指南 站长资讯通告:
您的位置: 首页 > Web开发 > Prototype > 正文

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

来源: www.bianceng.cn 阅读:

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

Tags:
相关文章列表: