`
eneasy
  • 浏览: 126330 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

原型模式

阅读更多
三. 原型模式
整理自 《java与模式》阎宏编著


1.意图:

    用原型对象指定要创建的对象的类型,并且通过拷贝这些原型对象创建新的同类型对象。

2.类图:

   

3.原理:
       通过拷贝一个现有的对象来生成新的同类型的对象。 

4.特征:  
5.说明:

    克隆必须满足的条件:

    a.对任何的对象x,都有:x.clone() != x,即克隆对象与原对象不是同一个对象。

    b.对任何的对象x,都有:x.clone().getClass() == x.get getClass(),即克隆对象与原对象的类型是一样的。

    c.如果对象x的equals()方法定义恰当的话,那么x.clone().equals(x)应当是成立的。

    在java中实现clone()应该满足这三个条件。



    浅复制:复制了值类型对象,对于引用类型对象,只复制了引用,它指向原来引用的对象。Java中clone为浅复制。
        深复制:对值类型和引用类型的对象都生成一份新的拷贝. Java中可以通过串行化来进行深复制,前提是对象以及对象内部所引用的对象都是可串行化的,否则需要考虑将那些不可串行化的对象可否设为transient,排除在复制过程之外。

6.使用案例:

7.代码:

 

//使用串行化进行深复制的方法

      public Object deepClone()

      {

           //将对象写到流里

           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();    

      }

//浅复制

      public Object clone()

      {

          return super.clone();

   }
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics