原型模式定義: 用原型實例指定建立對象的種類,而且經過拷貝這些原型建立新的對象.java
要理解原型原型模式必須先理解Java裏的淺複製和深複製。有的地方,複製也叫作克隆。Java提供這兩種克隆方式。app
淺克隆:被克隆對象的全部變量都含有與原來的對象相同的值,而它全部的對其餘對象的引用都仍然指向原來的對象。換一種說法就是淺克隆僅僅克隆所考慮的對象,而不克隆它所引用的對象。this
深克隆:被克隆對象的全部變量都含有與原來的對象相同的值,但它全部的對其餘對象的引用再也不是原有的,而這是指向被複制過的新對象。換言之,深複製把要複製的對象的全部引用的對象都複製了一遍,這種叫作間接複製。spa
Java語言的構建模型直接支持原型模型模式,全部要克隆的類必須實現一個標識接口Cloneable。全部的類都有一個Clone()方法(Object提供)。克隆知足的條件:對於任何對象x,都有x.clone()!=x,換言之,克隆的對象不是原來的對象;x.clone().getClass()==x.getClass(),換言之,克隆的對象與原對象是同一類型。x.clone().equals(x)成立。.net
Prototype模式容許一個對象再建立另一個可定製的對象,根本無需知道任何如何建立的細節,工做原理是:經過將一個原型對象傳給那個要發動建立的對象,這個要發動建立的對象經過請求原型對象拷貝它們本身來實施建立。對象
如何使用? 由於Java中的提供clone()方法來實現對象的克隆,因此Prototype模式實現一會兒變得很簡單.blog
eg:接口
調用的時候直接調用就能夠了。ip
AbstractSpoon spoon = new SoupSpoon();
AbstractSpoon spoon2 = spoon.clone();
固然也能夠結合工廠模式來建立AbstractSpoon實例。get