設計模式之Prototype

原型模式定義: 用原型實例指定建立對象的種類,而且經過拷貝這些原型建立新的對象.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:接口

 

 

[java:showcolumns]  view plain copy
·········10········20········30········40········50········60········70········80········90········100·······110·······120·······130·······140·······150
  1. public abstract class AbstractSpoon implements Cloneable     
  2. {     
  3.  String spoonName;     
  4.     
  5.  public void setSpoonName(String spoonName) {this.spoonName = spoonName;}     
  6.  public String getSpoonName() {return this.spoonName;}     
  7.     
  8.  public Object clone()     
  9.  {     
  10.  Object object = null;     
  11.  try {     
  12.  object = super.clone();     
  13.  } catch (CloneNotSupportedException exception) {     
  14.  System.err.println("AbstractSpoon is not Cloneable");     
  15.  }     
  16.  return object;     
  17.  }     
  18. }     
  19.  有個具體實現(ConcretePrototype):     
  20.     
  21. public class SoupSpoon extends AbstractSpoon     
  22. {     
  23.  public SoupSpoon()     
  24.  {     
  25.  setSpoonName("Soup Spoon");     
  26.  }     
  27. }    

 

 

 調用的時候直接調用就能夠了。ip

 

 AbstractSpoon spoon = new SoupSpoon(); 
 AbstractSpoon spoon2 = spoon.clone(); 
 固然也能夠結合工廠模式來建立AbstractSpoon實例。get

相關文章
相關標籤/搜索