原型模式

文檔查閱說明:

Tongkey

yiibai

runoob

大話設計模式

定義:用原型實例指定創建對象的種類,並且通過拷貝這些原型創建新的對象(實際上就是實現Cloneable接口,重寫clone()方法

使用場景:

● 資源優化場景

類初始化需要消化非常多的資源,這個資源包括數據、硬件資源等。

● 性能和安全要求的場景

通過new產生一個對象需要非常繁瑣的數據準備或訪問權限,則可以使用原型模式。

● 一個對象多個修改者的場景

一個對象需要提供給其他對象訪問,而且各個調用者可能都需要修改其值時,可以考慮使用原型模式拷貝多個對象供調用者使用

淺拷貝和深拷貝:

淺拷貝:Object類提供的方法clone只是拷貝本對象,其對象內部的數組、引用對象等都不拷貝,還是指向原生對象的內部元素地址,這種拷貝就叫做淺拷貝,其他的原始類型比如int、long、char、string(當做是原始類型)等都會被拷貝。

注意: 使用原型模式時,引用的成員變量必須滿足兩個條件纔不會被拷貝:一是類的成員變量,而不是方法內變量;二是必須是一個可變的引用對象,而不是一個原始類型或不可變對象。

深拷貝:對私有的類變量進行獨立的拷貝,如:thing.arrayList = (ArrayList<String>)this.arrayList.clone();

public abstract class Prototype implements Cloneable {
	private String id;

	public Prototype(String id) {
		super();
		this.id = id;
	}
	
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	
	public Object clone() {
      Object clone = null;
      try {
         clone = super.clone();
      } catch (CloneNotSupportedException e) {
         e.printStackTrace();
      }
      return clone;
   }
}
public class ConCreatePrototype extends Prototype {
	
	public ConCreatePrototype(String id) {
		super(id);
	}

}
public class Test {

	public static void main(String[] args) {
		ConCreatePrototype con = new ConCreatePrototype("I");
		ConCreatePrototype clone = (ConCreatePrototype) con.clone();
		System.out.println(clone.getId());
		System.out.println(con == clone);
		System.out.println(con.equals(clone));
	}

}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章