萬盛學電腦網

 萬盛學電腦網 >> 網絡編程 >> 編程語言綜合 >> 淺談Java設計模式關於原型模式(Prototype)思索建議

淺談Java設計模式關於原型模式(Prototype)思索建議

java教程:關於Java設計模式關於原型模式(Prototype) IT信息技術http://www.52ij.com/jishu/


淺談Java設計模式關於原型模式(Prototype)思索建議 三聯


首先需要弄清楚什麼叫原型模式,或者說為什麼要有原型模式,運用它會給我們帶來什麼或能解決什麼問題?原型模式(Prototype)同抽象工廠模式同屬於創建型模式,它主要關注於大量相同或相似對象的創建問題,應用原型模式就是先需要一個原對象,然後通過對原對象進行復制(克隆),來產生一個與原對象相同或相似的新對象。注意這裡所說的對象相同不是指復制出來的副本對象與原對象是同一個對象,相反復制出來的副本對象必須和原對象是兩個不同的對象,只是兩個對象的內容相同。

我們在編程過程中,經常會遇到這種情況,需要把一個對象的值賦值到另一個新對象,而且以後對新對象屬性的修改不會影響到原對象,即兩個對象是相互獨立的,比如:
public clalss A{
private Long id;
private String name;
get set略......
public A(){}
public A(Long id,String name){
this.id = id;

this.name = name;
}
}
A a = new A(1,"a");
A b = null;
如果現在需要把對象a的內容全部復制到對象b中去,怎麼辦?如果你這樣寫,b = a;那就大錯特錯了,因為這樣根據沒有創建新對象,兩個都是指向內存中同一個地址。或許你又會這樣,b = new A(); 然後b.setId();
b.setName();這樣一個一個的賦值。這樣是創建了兩個獨立對象,但是還是有問題,如果對象屬性有N多個怎麼辦,理論上這種情況是存在的,如果還是那樣做,豈不是很累?怎麼辦?運用原型模式呗。實現原型模式很簡單,只要待復制對象實現Cloneable接口,並重寫父類Object的clone()方法即可。下面是我寫的一個示例:
package com.prototype;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OptionalDataException;
import java.io.Serializable;

/**
* 湯匙基類
*
* @author Lanxiaowei
* @createTime 2011-10-10 09:04
*/
public abstract class Spoon implements Cloneable,Serializable {
/**
* 名稱
*/
private String name;
/**
* 價格
*/
private double price;
/**
* 使用人
*/
private People people;

public People getPeople() {
return people;
}

public void setPeople(People people) {
this.people = people;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public double getPrice() {
return price;
}

public void setPrice(double price) {
this.price = price;
}

copyright © 萬盛學電腦網 all rights reserved