一篇不错的文章,介绍clone()方法的

    
cc 02-08-19

这几天一直迷惑原型模式的设计应用,现在理解了clone()方法,感觉还不错。这篇文章挺受启发,看看吧。

http://www-900.ibm.com/developerWorks/cn/java/l-jpointer/index.shtml

banq
2002-08-19 11:20

对 原型模式 基本就是clone方法。
IBM这个文章有点罗嗦。

java中对象赋值和基本类型赋值是不一样的,基本类型赋值就象我们通常概念一样,对象赋值实际是传递了一个引用,指向,实际是指向同一个内存,赋值者和被赋值者实际拥有同一个内存块,所以互相会影响,要实现真正的赋值,就必须clone(克隆)


cc
2002-08-19 11:37

在何处应该使用原型法呢?《设计模式》中说得很不清楚,我在实际应用中觉得工厂方法能使用的地方,改一改,原型法也可以使用。使用后,又想不出它好在那里?

banq
2002-08-22 21:33

原型法只有在需要复制对象时才有必要使用。
谈到复制对象,一般是应用在一些极其高妙的技巧里。
我好像在一个shoppingcart程序里看到过

banq
2002-08-24 23:37

import javax.servlet.http.HttpServletRequest;
import java.util.Hashtable;
import java.util.Enumeration;
public class BasketBean {
/* 当前购物蓝中的商品,这里是用Hashtable来储存 */
private Hashtable products_ = new Hashtable();
/* 这是个计算购物蓝中总价的方法 */
public double getTotal() {…}
/*这是一个获得某个商品的价格的方法 */
public double getPounds(Product p_in_inv) {…}

/*调整刷新当前购物蓝中的内容,这种情况发生在客户在检查购物车中的内容时,可能有所增改。 */
public void savePurchases(HttpServletRequest request) {
//首先得到库存商品清单
Product[] products = InventoryBean.getCatalogue();
//从前台获得用户购买本商品的数量
String[] lbValues = request.getParameterValues("pounds");
if (lbValues != null) {
//清除本购物蓝中原来的内容
products_.clear();
for (int i = 0; i < lbValues.length; i++) {
double lbs = Double.parseDouble(lbValues);
if(lbs > 0) {
//从库存商品清单中 复制一份商品出来
Product p =(Product)products.clone();
//改变这个商品的数量为用户输入的数量
p.setPounds(lbs);
//将这个商品放入本购物蓝中
products_.put(Integer.toString(p.getSKU()), p);
}
}
}
}
}

2Go 1 2 下一页