经过克隆一个已存在的实例,来"实例化"一个新的实例。对象
若是存在一个实例,它的状态和方法与将要实例化的一个新的实例很接近,那么与其经过类模版和大量的初始化参数去实例化还不如直接克隆这个已存在的实例,从而获得一个新的实例。这个已存在的实例,自身须要提供一个克隆本身的方法。原型
若是实例内部的构造过于复杂,且简单的浅复制方式没法知足克隆的要求。那么实现一个复杂的克隆方法的代价,可能会大于组织初始化参数的代价。这种状况下,应用原型模式就不合适了。方法
原型模式能够被理解为使用简单的方案同时实现了面向对象中的“子类化”和“实例化”。在静态语言中,由于没法在运行时为对象增长属性和方法,因此应用原型模式只体现了实例化的做用。而在动态语言中,原型模式的威力被充分地体现了出来。经过动态增长属性和方法,在动态语言中即便没有类的存在,也不影响对象的建立。模版