`
wdt1988520
  • 浏览: 15526 次
社区版块
存档分类
最新评论

原型模式Prototype

阅读更多

原型模式:也是一种创建型模式,它关注的是系统中需要创建大量对象,但对象之间有很多相似之处或者对象基本相同。

 

原型模式有两种不同的实现:1、简单形式     2、登记形式
一、简单形式

public interface Prototype{
    public Object clone();
}

public class P1 implements Prototype{
   public Prototype clone(){
        Prototype  p=new P1;
        return p;
   }
}

public class P2 implements Prototype{
   public Prototype clone(){
       Prototype p=new P2();
       return  p;
   }

}

//客户端
public class client{

   Prototype  prototype;

   public client(Prototype  prototype){
        this.prototype=prototype;
   }

   //clone
  public void opration(){
     Prototype p=prototype.clone();
  }
}
 

 二、登记形式    多一个原型管理器(PrototypeManger),作用是记录每个创建的对象。

public class PrototypeManager(){
    private static Map<String ,Prototype> prototypeMap=new HashMap<String,Prototype>();

    private PrototypeManager(){
         
    }

    public synchronized  static Prototype getPrototype(String key){
       return  prototypeMap.get(key);
    }

    public synchronized static void  setPrototype(String key,Prototype p){
        prototypeMap.put(key,p);
    }

    
}

 

//客户端
public class client{
   Prototype p1=new xxxPrototype();//只是一个实现
   PrototypeManager.setPrototype("p1",p1);
   
   //clone
  Prototype p2=PrototypeManager.getPrototype("p1").clone();
}

 

 

简单形式用于单一少量的对象创建上.
登记形式:原型对象数量不固定,或者原型对象在管理器中已经拥有满足要求的原型对象。

 

clone方法的两种克隆方式:浅克隆和深克隆
浅克隆:不包含对象中引用对象的克隆。只针对(String和基本类型的克隆)。
深克隆:包含对引用对象的,深层引用对象的克隆,注意循环引用的处理。

 

一、浅克隆:java中实现Cloneable接口,就是一个浅克隆.注:实现Cloneable接口是为了标注为一个可克隆对象。

public class Computer implements Cloneable{
     private String name;

     public Object clone(){
        try{ 
           return super.clone();
        }catch(CloneNotSupportedException e){
          return null;
        }
    }

}

//调用
Computer c=new Computer();
Computer x=c.clone();

 

二、深克隆:经过对象的序列换与反序列化实现。

public Object deepClone()  throws IOException,ClassNotFoundException{
    //将对象写入流
    ByteArrayOutputSteam bos=new ByteArrayOutputStream();
    ObjectOutoutStream oos=new ObjectOutputStream(bos);    
    oos.writeObject(this);
    
   //从流中读取对象
   ByteArrayInputSteam bis=new ByteArrayInputStream(bos);
   ObjectInputStream ois=new ObjectInputStream(bis);
   return ois.readObject(ois);
    
}

这样写的前提是类中的引用对象都是可序列化的,把不能序列化的对象注解@transient。

 

 

应用场景:1、当多个调用者要修改一个对象时。

                  2、当一个对象有很多引用对象,使用clone的效率会高于new。因为在内存中把已有的对象用流输出。

                  3、有一些对象,比如线程(Thread)对象或Socket对象,是不能简单复制或共享的。不管是使用浅度克隆还是深度克隆,只要涉及这样的间接对象,就必须把间接对象设成transient而不予复制;或者由程序自行创建出相当的同种对象,权且当做复制件使用。

分享到:
评论

相关推荐

    原型设计模式prototype

    **原型设计模式(Prototype Pattern)**是一种创建型设计模式,它允许我们通过复制现有的对象来创建新对象,而不是通过构造函数来实例化新对象。在面向对象编程中,当我们需要频繁地创建具有相同或相似属性的对象时,...

    原型模式 Prototype Pattern

    原型模式是一种创建型设计模式,它允许用户通过复制现有的实例来创建新的对象,而不是通过传统的构造器来创建对象。这种模式适用于那些创建对象的成本较高,或者当对象的创建依赖于复杂的环境配置时。通过使用原型...

    设计模式之Prototype(原型)

    "原型"(Prototype)设计模式是其中的一种,它的主要目标是通过复制现有的对象来创建新的对象,而不是通过构造函数来创建新实例。这种方法尤其适用于当创建新对象的过程复杂或者昂贵时,例如,当对象需要大量初始化...

    原型模式prototype

    **原型模式(Prototype)**是软件设计模式中的一种,它属于创建型模式,主要用于简化对象的创建过程,通过复制已有对象来生成新对象,避免了重复的构造过程,提高了代码的效率和可维护性。在Java、C#等面向对象语言...

    设计模式 创建型模式 Prototype模式(原型)

    Prototype模式允许一个对象再创建另外一个可定制的对象,根本无需知道任何如何创建的细节,工作原理是:通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝它们自己来实施创建。...

    设计模式C++学习之原型模式(Prototype)

    本篇文章将深入探讨“原型模式(Prototype)”这一经典的设计模式,它是面向对象设计的一个重要概念,尤其在C++编程中有着广泛的应用。 原型模式是一种创建型设计模式,它的核心思想是通过复制已有对象来创建新对象,...

    23种设计模式之Prototype模式代码

    **原型模式(Prototype模式)**是软件设计模式中的一个经典模式,属于创建型模式。它提供了一种通过复制现有的对象来创建新对象的方式,而无需知道具体创建过程的细节。这种模式在需要频繁创建相似对象时非常有用,...

    Prototype模式

    **原型模式(Prototype Pattern)**是一种创建型设计模式,它提供了一种通过复制已有对象来创建新对象的方式,而不是通过构造函数。在某些情况下,当创建新对象的成本非常高时(例如,对象需要大量的初始化操作或者从...

    c++-设计模式之原型模式(Prototype Pattern)

    原型模式(Prototype Pattern)是一种创建型设计模式,允许通过复制现有对象来创建新对象,而不是通过类构造器。这种模式常用于需要频繁创建相似对象的场景,能够提高性能并减少内存使用。 原型模式的组成 原型接口...

    PHP设计模式(四)原型模式Prototype实例详解【创建型】

    原型模式(Prototype)是一种创建型设计模式,它的核心思想是通过复制已有对象来创建新对象,以减少重复的构造过程,提高代码效率。在PHP中,原型模式通常通过对象的克隆(clone)操作来实现。 1. **概述** 原型...

    创建型模式之原型模式(Prototype Pattern)

    在软件设计中,原型模式是一种创建型设计模式,它提供了一种通过复制已有对象来创建新对象的方式,避免了重复的构造过程,提高了代码的效率和可维护性。原型模式的核心思想是利用对象的克隆功能来实现新对象的创建,...

    [创建型模式]设计模之原型模式(Prototype Pattern)

    **原型模式(Prototype Pattern)**是一种创建型设计模式,它允许我们通过复制现有的对象来创建新对象,而不是通过构造函数或工厂方法。这种模式的核心在于,它提供了一种更高效、更灵活的方式来创建新实例,特别是在...

    原型模式(ProtoType)C#应用案例

    原型模式(Prototype)是一种软件设计模式,主要用于简化创建对象的过程,尤其当对象的构造过程复杂时。在C#中,我们可以利用接口或者继承来实现这一模式。本案例将深入探讨如何在C#环境中运用原型模式。 首先,...

    原型模式(Prototype)

    原型模式是一种创建型设计模式,它提供了一种通过复制已有对象来创建新对象的方式,而不是通过传统的构造函数。这种模式在系统中需要创建大量相似对象时特别有用,可以提高效率并减少内存开销。在Java、C#等面向对象...

    Prototype Pattern原型模式

    **原型模式(Prototype Pattern)**是一种基于克隆的创建型设计模式,它的主要目的是为了提高创建新对象的效率,特别是当创建新对象的过程复杂或者资源消耗较大时。在原型模式中,一个已经创建的对象(称为原型)被...

    Java设计模式之Prototype原型模式

    Java设计模式之Prototype原型模式 Prototype原型模式是Java设计模式中的一种创建型模式,它主要用于对象的克隆和创建。该模式的主要思想是将一个对象作为原型,然后通过克隆该对象来创建新的对象,从而实现对象的...

    设计模式之原型模式Java实现和类设计图

    原型模式(Prototype Pattern)是其中一种行为设计模式,主要用于对象创建。它通过复制已有对象来创建新对象,而不是通过传统的构造函数来创建。在Java中,原型模式可以有效地提高性能,特别是在创建复杂对象时。 #...

    设计模式之原型模式

    **原型模式(Prototype Pattern)**是软件设计模式中的结构型模式之一,主要用来简化实例化过程,减少类的创建。在原型模式中,一个对象可以被用作创建其他新对象的模板,通过复制已有对象来创建新对象,而不是通过new...

    设计模式之Prototype

    "原型"(Prototype)模式是其中的一种行为设计模式,它主要用于简化对象的创建过程,通过复制已有对象来生成新对象,而非每次都创建一个新的实例。这种模式在需要大量相似对象时尤其有效,可以避免重复代码并提高...

Global site tag (gtag.js) - Google Analytics