原始模型模式计划
原始模型模式,我认为也可以称为克隆模式,就是由一个完整的产品对象复制出另一个对象的模式。它也是对象的创建模式,但是只与原始对象有关,不需要工厂类。 原始模型模式最成功的应用之一就是Object类的clone方法,可能由于这种方法的存在,很多人没有意识到原始模型模式是一种特定的创建模式。但是,它的确是一种产生对象的模式,而且clone方法所实现的只是原始模型模式的一种情况。
原始模型模式的对象创建方式有两种,可以分别称为浅复制和深复制:浅复制就是从原对象复制出新的对象时,并不复制它的成员对象,即它的成员对象句柄所指向的还是原对象中的成员对象;深复制就是在新对象中,成员对象也是新的。 packageprototype;
publicinterfacePrototype...{
publicvoidprintPart();
ObjectflatClone();
ObjectdeepClone()throwsException;
}
packageprototype;
.*;
publicclassConcretePrototypeimplementsPrototype,Serializable...{
privatePartpart;
publicConcretePrototype()...{
part=newPart();
}
publicvoidprintPart()...{
intln(part);
}
publicObjectflatClone()...{
ConcretePrototypecp=newConcretePrototype();
rt=rt;
returncp;
}
publicObjectdeepClone()throwsException...{
ByteArrayOutputStreambo=newByteArrayOutputStream();
并向他们宣传有关的法律法规 ObjectOutputStreamoo=newObjectOutputStream(bo);
iteObject(this);
ByteArrayInputStreambi=newByteArrayInputStream(ByteArray());
ObjectInputStreamoi=newObjectInputStream(bi);
return(adObject());
}
classPartimplementsSerializable...{
}
}
packageprototype;
publicclassClient...{
publicstaticvoidmain(String[]args)throwsException...{
ConcretePrototypeoriginate,cloned,deepCloned;
originate=newConcretePrototype();
eep(2000);
cloned=(ConcretePrototype)atClone();
deepCloned=(ConcretePrototype)epClone();
intln(originate);
intln(cloned);
intln(deepCloned);
intPart();
intPart();
intPart();
}
}
可以看出,打印的前三行各不相同,这说明通过浅复制和深复制,所得到的对象都是与原对象不同的;打印的后三行中有两行相同,这说明,在浅复制时,成员对象的实体没有被复制,只是复制了其句柄,而深复制时,成员对象的实体也被复制了。
银川治疗阳痿哪家好痛风关节炎的症状有哪些
呼和浩特治白癜风哪里最好
-
斯诺克海口赛吕昊天惨遭塞尔比零封赵心童无
人工智能 | 2020-07-09
-
利物浦大将不关心曼城战绩他们不可能场场
人工智能 | 2020-07-01
-
视频弹幕网A站与B站为何发展出两条不同的
人工智能 | 2019-07-16