前言
在传统的面向对象编程语言中(如Java,C#), 类和对象就像柏拉图所说的“模子”和姜饼人,所有的姜饼人(对象)总是从模子(类)中创建而来,类生成实例就像厨师用模子做出姜饼人。
而在原型编程的思想中,类并不是必须的,对象未必从类中创建,而是通过克隆另一个对象得到。
为了更清晰地了解原型模式,将其与面向对象编程的思想区分开,我们先来了解一种轻巧又基于原型的语言—— Io语言。
IO语言
Io语言在2002年由 Steve Dekorte发明。可以从 http://iolanguage.com 下载到Io语言的解释器。
作为一门基于原型的语言,Io中没有类的概念,每一个对象都是基于另外一个对象的克隆。而所有对象的祖先,即根对象,在Io语言中叫 Object.
现在我们有了根对象Object, 想要创建一个对象叫做Animal, 那么Animal要从Object中复制而来,而Object就是Animal的原型。
Aniaml := Object clone //克隆动物对象
假设在Io的世界中,所有的Animal都会叫,我们给Animal添加makeSound方法:
Animal makeSound := method( "animal makeSound " print );
接着,我们再创建一个 Dog 对象:
Dog := Animal clone
Dog 能够摇尾巴
Dog wagTail := method( "Dog is wagging his tail" print );
以此类推,我们可以创建出更多的对象。在以上举出的例子中存在这样的原型链: