您的位置:首页 > 编程语言 > Java开发

《java与模式》-10 原始模型模式

2017-11-06 16:49 232 查看
通过给出一个原型对象指明所要创建的对象的类型,然后复制这个对象创造出更多同类型的对象;

java 本身支持原始模型模式,Object有一个clone(),可以复制对象,但是要复制的话就必须要实现一个标志接口Cloneable接口,否则的话会抛CloneNotSupportedException异常;

简单形式的原始模型

客户端角色:提出创建对象的请求。

抽象原型角色(Cloneable的子接口),具体原型角色(被复制对象);

登记形式的原始模型

客户端角色,抽象原型角色,具体原型角色,原型管理器角色(创建具体原型类对象,并记录保存每一个被创建的额对象);

如果要创建的原型数目较少并比较固定,可以采用简单形式,如果对象数目不固定就采用登记形式;

深复制与浅复制:深复制就是将对象本身以及对象的引用全部复制(可能嵌套很多层),浅复制就是只复制对象本身,不复制它的引用;

利用串行化做深复制

串行化:把对象写到流里的过程,又叫“冷冻”;

并行化:把对象重流中读出来的过程,又叫“解冻”;

写到流里是对对象的拷贝,原对象依然在JVM中;

java里深复制,常常可以先使对象实现Serializable接口,然后把对象写入流中,再从流中读出来便可以重建对象;

如果对象中有不可串行化的对象(例如Thread,Socket,流)需要transient修饰,排除在复制过程之外;

何时使用原始模型模式

加入一个系统的产品类是动态加载的,而且产品类有一定的等级结构,如果这时候采用工厂模式,工厂就不得不具有等级结构,对于产品结构经常变化的系统来说,采用工厂模式不方便。

这时采用原始模式给每一个产品类配一个clone方法(只需要根类配备就可以),就避免了工厂模式所带来的具有固定结构的工厂类;

这样一个原始模型的系统,与他的产品对象是怎么创建出来的,以及产品对象之间的结构是怎样的,以及这个结构会不会发生变化是没有关系;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java