且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

java设计模式--原型设计模式 Prototype

更新时间:2022-08-13 08:01:19

所谓的原型即给我们一个对象 我们就可以无限复制出这个对象的副本  ,而不是引用这个对象   。 

复制出来的副本 是一个个独立的对象 , 绝不是 原来对象的引用 。

这就要求设计到 java中的对象克隆技术  ,克隆的对象所在的类要实现Cloneable接口  以及覆盖 Object类的  clone()方法  。

我们不能直接调用Object的clone方法  因为  Object类并没有实现 Cloneable接口  如果调用就会抛出 一个  CloneNotSupporteException异常表示不支持  对象克隆 。

下面是一个 原型模式的简单例子: 
a=2
a=2
a==b为false

上面是输出的结果可以看出来 ,对象内容一样 但是 却不是同一个对象 。

class  Prototype  implements Cloneable
{  
public String name ;
public Prototype(){}
public Prototype(String name)
{
  this.name=name ;
}
@Override
public Object clone()   //不能直接调用Object类的clone方法 因为Object类 并没有实现Cloneable接口 所以会抛出不支持的异常 。
{
  Object obj=null ;
  try {
   obj=super.clone() ;
  } catch (CloneNotSupportedException e) {
   e.printStackTrace();
  }
  return obj;
}


class  TypeA extends Prototype
{  
private int a   ;
TypeA(){}
TypeA(int a){this.a=a ;}
    public void show()
    {
     System.out.println("a="+this.a);
    }
    
}
//我们要做的是给定一个TypeA对象 我们 复制 无数个TypeA出来
public class MyPrototype

   public static void main(String []args)
   {
      TypeA  a=new TypeA(2) ; //一个原型对象 
      TypeA  b=(TypeA)a.clone()  ;
      a.show() ;
      b.show() ;
      System.out.println("a==b为" + (a==b));   //结果是false表示 不是同一个对象 但是对象的属性值完全不同    
   }
}