WEB开发网
开发学院WEB开发Jsp 原始模型模式 阅读

原始模型模式

 2008-01-05 08:24:48 来源:WEB开发网   
核心提示: 原始模型模式,我认为也可以称为克隆模式,原始模型模式,就是由一个完整的产品对象复制出另一个对象的模式,它也是对象的创建模式,而深复制时,成员对象的实体也被复制了,但是只与原始对象有关,不需要工厂类

   原始模型模式,我认为也可以称为克隆模式,就是由一个完整的产品对象复制出另一个对象的模式。它也是对象的创建模式,但是只与原始对象有关,不需要工厂类。      原始模型模式最成功的应用之一就是Object类的clone方法,可能由于这种方法的存在,很多人没有意识到原始模型模式是一种特定的创建模式。但是,它的确是一种产生对象的模式,而且clone方法所实现的只是原始模型模式的一种情况。     原始模型模式的对象创建方式有两种,可以分别称为浅复制和深复制:浅复制就是从原对象复制出新的对象时,并不复制它的成员对象,即它的成员对象句柄所指向的还是原对象中的成员对象;深复制就是在新对象中,成员对象也是新的。 Word-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid">原始模型模式(图一)package PRototype;
原始模型模式(图一)
原始模型模式(图二)原始模型模式(图三)public interface Prototype ...{
原始模型模式(图四)
原始模型模式(图四)  public void printPart();
原始模型模式(图四)  
原始模型模式(图四)  Object flatClone();
原始模型模式(图四)  
原始模型模式(图四)  Object deepClone() throws Exception;
原始模型模式(图四)  
原始模型模式(图五)}
原始模型模式(图一)
原始模型模式(图一)
原始模型模式(图一)package prototype;
原始模型模式(图一)
原始模型模式(图一)import java.io.*;
原始模型模式(图一)
原始模型模式(图二)原始模型模式(图三)public class ConcretePrototype implements Prototype , Serializable...{
原始模型模式(图四)
原始模型模式(图四)  private Part part;
原始模型模式(图四)  
原始模型模式(图六)原始模型模式(图七)  public ConcretePrototype() ...{
原始模型模式(图四)    part = new Part();
原始模型模式(图八)  }
原始模型模式(图四)  
原始模型模式(图六)原始模型模式(图七)  public void printPart() ...{
原始模型模式(图四)    System.out.println(part);
原始模型模式(图八)  }
原始模型模式(图四)  
原始模型模式(图四)
原始模型模式(图六)原始模型模式(图七)  public Object flatClone() ...{
原始模型模式(图四)    ConcretePrototype cp = new ConcretePrototype();
原始模型模式(图四)    cp.part = this.part;
原始模型模式(图四)    return cp;
原始模型模式(图八)  }
原始模型模式(图四)
原始模型模式(图四)  
原始模型模式(图六)原始模型模式(图七)  public Object deepClone() throws Exception ...{
原始模型模式(图四)    ByteArrayOutputStream bo = new ByteArrayOutputStream();
原始模型模式(图四)    ObjectOutputStream oo = new ObjectOutputStream(bo);
原始模型模式(图四)    oo.writeObject(this);
原始模型模式(图四)    ByteArrayInputStream bi = new ByteArrayInputStream(bo.toByteArray());
原始模型模式(图四)    ObjectInputStream oi = new ObjectInputStream(bi);
原始模型模式(图四)    return (oi.readObject());
原始模型模式(图八)  }
原始模型模式(图四)
原始模型模式(图六)原始模型模式(图七)  class Part implements Serializable ...{
原始模型模式(图四)    
原始模型模式(图八)  }
原始模型模式(图四)  
原始模型模式(图五)}
原始模型模式(图一)
原始模型模式(图一)
原始模型模式(图一)package prototype;
原始模型模式(图一)
原始模型模式(图二)原始模型模式(图三)public class Client ...{
原始模型模式(图四)  
原始模型模式(图六)原始模型模式(图七)  public static void main(String[] args) throws Exception ...{
原始模型模式(图四)    ConcretePrototype originate, cloned, deepCloned;
原始模型模式(图四)    originate = new ConcretePrototype();
原始模型模式(图四)
原始模型模式(图四)    Thread.sleep(2000);
原始模型模式(图四)
原始模型模式(图四)    cloned = (ConcretePrototype)originate.flatClone();
原始模型模式(图四)    deepCloned = (ConcretePrototype)originate.deepClone();
原始模型模式(图四)    System.out.println(originate);
原始模型模式(图四)    System.out.println(cloned);
原始模型模式(图四)    System.out.println(deepCloned);
原始模型模式(图四)    originate.printPart();
原始模型模式(图四)    cloned.printPart();
原始模型模式(图四)    deepCloned.printPart();
原始模型模式(图八)  }
原始模型模式(图四)
原始模型模式(图五)}
原始模型模式(图一) 

   下面是这段代码的打印:

prototype.ConcretePrototype@1034bb5
prototype.ConcretePrototype@19efb05
prototype.ConcretePrototype@723d7c
prototype.ConcretePrototype$Part@b162d5
prototype.ConcretePrototype$Part@b162d5
prototype.ConcretePrototype$Part@22c95b

     可以看出,打印的前三行各不相同,这说明通过浅复制和深复制,所得到的对象都是与原对象不同的;打印的后三行中有两行相同,这说明,在浅复制时,成员对象的实体没有被复制,只是复制了其句柄,而深复制时,成员对象的实体也被复制了。

进入讨论组讨论。

Tags:原始 模型 模式

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接