怎么做国际网站,焊接加工订单网,英文网站建设官网,鞍山建设工程信息网站简介原始模型模式属于对象的创建模式。通过一个原型对象来指明要创建对象的类型#xff0c;然后用复制原型对象的方法来创建出更多同类型的对象。Java所有的类都是从java.lang.Object类继承来的#xff0c;Object类提供clone()方法对对象进行复制。一般调用clone()方法需要满…简介原始模型模式属于对象的创建模式。通过一个原型对象来指明要创建对象的类型然后用复制原型对象的方法来创建出更多同类型的对象。Java所有的类都是从java.lang.Object类继承来的Object类提供clone()方法对对象进行复制。一般调用clone()方法需要满足一下条件1、对于任何对象x,都有x.clone()!x。也就是克隆的对象和原对象不是一个对象。2、对于任何对象x都有x.clone().getClass()x.getClass()。也就是克隆对象与原对象是相同的类型。3、如果对象x的equal()方法定义恰当的话那么x.clone().equal(x)应该成立。原始模型模式原始模型模式分为两种类型1、简单形式2、登记形式。下面分别解释下这两种类型。简单形式的原始模型模式类图这种模式的三个角色1、客户角色客户提出创建对象的请求。2、抽象原型抽象角色给出具体原型所需的接口。3、具体原型被复制的对象需实现抽象原型所需要的接口。抽象原型代码public interface Prototype extendsCloneable{ public Object clone() throwsCloneNotSupportedException; }具体原型代码public class ConcrecePrototype implementsPrototype{ public Object clone() throwsCloneNotSupportedException { try{ return super.clone(); } catch(Exception e) { return null; } } }客户角色代码public classClient { privatePrototype prototype; public void operation(Prototype example) throwsCloneNotSupportedException{ Prototype p (Prototype) example.clone(); } }登记形式的原始模型模型类图这种模式的角色1、客户角色客户提出创建对象的请求。2、抽象原型抽象角色给出具体原型所需的接口。3、具体原型被复制的对象需实现抽象原型所需要的接口。4、原型管理器创建具体原型类对象并记录每一个被创建的对象。抽象原型代码public interface Prototype extendsCloneable{ public Object clone() throwsCloneNotSupportedException; }具体原型代码public class ConcrecePrototype implementsPrototype{ public synchronized Object clone() throwsCloneNotSupportedException { Prototype temp null; try{ temp (Prototype) super.clone(); } catch(Exception e) { System.out.println(clone fail); }finally{ returntemp; } } }原型管理器代码public classPrototypeManager { private Vector vector newVector();public voidadd(Prototype e){ vector.add(e); }public Prototype get(inti){ return(Prototype) vector.get(i); } }客户端代码public classClient { privatePrototypeManager pm; privatePrototype p;public void registerPrototype(Prototype prototype) throwsCloneNotSupportedException{ Prototype temp (Prototype) prototype.clone(); pm.add(temp); } }可以看出如果要创建的原型对象少且固定的话可以考虑使用简单形式的原型模式。如果要创建的原型对象不固定可以使用登记形式的原型模式。原型对象有原型管理器保管如果其中有则直接拿出没有则复制并加入其中。引深看到这里就会想到了java中重要的话题浅复制和深复制。浅复制被复制对象的所有变量都与原来对象有相同的值而所有对其对象的引用都指向原对象。浅复制只考虑复制所考虑的对象而不复制它所引用的对象。深复制被复制对象的所有变量都与原来对象有相同的值那些引用其他对象的变量指向被复制的新对象。深复制中那些引用其他对象的变量将指向被复制过的新对象也就是深复制把要复制的对象所引用的对象都复制了一遍。原始模型模式的优缺点优点1、 原始模型模型模式允许动态地增加或减少产品类。由于创建产品类实例的方法是产品类内部具有的因此增加新产品的对整个结构没有影响。2、 原始模型模式提供简化的创建结构。工厂方法模式常常需要有一个与产品类等级相同的结构而原始模型模式就不需要这样。3、 具有给一个应用软件动态加载新功能的能力。4、 产品类不需要非得有任何事先确定的等级结构因为原始模型模式适用于任何的等级。缺点原始模型模式最主要的缺点就是需要为每一个类都必须具备一个复制方法。另外如果在原型对象中有间接对象可以将间接对象设置为transient不予以复制或者自行创建出相当的同种对象。