`
hudepin
  • 浏览: 42905 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

java原型模式(Prototype)

阅读更多
原型模式(Prototype)

有的时候,我们需要一个实例时,并且,当创建一个实例的过程比较复杂或者说是昂贵时,

比如,创建实例的构造函数非常的复杂,在执行这个构造函数时会消耗较长的时间,

同时呢,这个构造函数中的一些信息又没有什么变化

(也就是说创建第一个实例时初始化信息是这样的,创建第二个实例时初始化信息还是还是这样的),

那么直接使用 new 来创建这样一个实例就显得太昂贵了,

最好的解决方法,并不是使用 new 来实例化一个对象,

而是使用克隆,也就是复制,克隆呢,就是通过复制现在已经有了的实例来创建新的实例,

这样有什么好处呢?

很明显,这样实现呢,客户端根本就不知道具体要实例化的是哪一个类,

它只知道是复制了,但具体的实例化情况,它却是一无所知的,这样便对客户端进行了隐藏,

同时,复制一个对象一般情况下会比创建一个对象性能更高(当然有时候也不一定,只是一般情况而已)


java提供这两种克隆方式。

    浅克隆:被克隆对象的所有变量都含有与原来的对象相同的值,而它所有的对其他对象的引用都仍然指向原来的对象。换一种说法就是浅克隆仅仅克隆所考虑的对象,而不克隆它所引用的对象。

    深克隆:被克隆对象的所有变量都含有与原来的对象相同的值,但它所有的对其他对象的引用不再是原有的,而这是指向被复制过的新对象。换言之,深复制把要复制的对象的所有引用的对象都复制了一遍,这种叫做间接复制。

  Java语言的构建模型直接支持原型模型模式,所有要克隆的类必须实现一个标识接口Cloneable。所有的类都有一个Clone()方法(Object提供)。克隆满足的条件:对于任何对象x,都有x.clone()!=x,换言之,克隆的对象不是原来的对象;x.clone().getClass()==x.getClass(),换言之,克隆的对象与原对象是同一类型。x.clone().equals(x)成立。
Java代码  收藏代码

    public class Sheep implements Cloneable 
     
        { 
     
            private String name = "Dolly"; 
     
            public Object clone() throws CloneNotSupportedException 
     
            { 
     
          return super.clone(); 
     
            } 
     
        } 


原型模式定义: 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象.

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

如何使用? 因为Java中的提供clone()方法来实现对象的克隆,所以Prototype模式实现一下子变得很简单.

以勺子为例:
Java代码  收藏代码

    public abstract class AbstractSpoon implements Cloneable 
    { 
     String spoonName; 
     
     public void setSpoonName(String spoonName) {this.spoonName = spoonName;} 
     public String getSpoonName() {return this.spoonName;} 
     
     public Object clone() 
     { 
     Object object = null; 
     try { 
     object = super.clone(); 
     } catch (CloneNotSupportedException exception) { 
     System.err.println("AbstractSpoon is not Cloneable"); 
     } 
     return object; 
     } 
    } 
     有个具体实现(ConcretePrototype): 
     
    public class SoupSpoon extends AbstractSpoon 
    { 
     public SoupSpoon() 
     { 
     setSpoonName("Soup Spoon"); 
     } 
    } 




调用Prototype模式很简单:

AbstractSpoon spoon = new SoupSpoon();
AbstractSpoon spoon2 = spoon.clone();
当然也可以结合工厂模式来创建AbstractSpoon实例。

在Java中Prototype模式变成clone()方法的使用,由于Java的纯洁的面向对象特性,使得在Java中使用设计模式变得很自然,两者已经几乎是浑然一体了。这反映在很多模式上,如Interator遍历模式。
分享到:
评论

相关推荐

    原型设计模式prototype

    在面向对象编程中,当我们需要频繁地创建具有相同或相似属性的对象时,原型模式可以极大地提高效率。 ### 模式原理 在原型模式中,一个类定义了创建新对象的接口,而其实现由它的子类完成。这个接口通常只有一个...

    原型模式prototype

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

    Java设计模式之Prototype原型模式

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

    原型模式 Prototype Pattern

    ### 原型模式 Prototype Pattern #### 概述 原型模式是一种创建型设计模式,它允许用户通过复制现有的实例来创建新的对象,而不是通过传统的构造器来创建对象。这种模式适用于那些创建对象的成本较高,或者当对象...

    原型模式(Prototype)

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

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

    **原型模式(Prototype Pattern)详解** 在软件设计中,原型模式是一种创建型设计模式,它提供了一种通过复制已有对象来创建新对象的方式,避免了重复的构造过程,提高了代码的效率和可维护性。原型模式的核心思想...

    Java原型模式

    Java原型模式是面向对象设计中的一种重要模式,它属于创建型设计模式,主要用来简化实例化过程,提高代码复用效率。在Java中,原型模式通过实现Cloneable接口和覆盖clone()方法来复制对象,避免了使用构造函数进行...

    详解JAVA 原型模式

    【Java原型模式详解】 原型模式(Prototype Pattern)是一种创建型设计模式,它的主要目标是通过复制现有的对象来创建新对象,以减少重复的构造过程,提高性能。在Java中,原型模式通常涉及到对象的克隆操作,即...

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

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

    通过java实现原型模式(Prototype Pattern).rar

    在Java中,原型模式通常通过实现一个原型接口或抽象类,并在具体类中提供克隆方法来实现。Java中有一个内置的Cloneable接口和Object类的clone()方法,它们可以被用来实现对象的克隆。但是,直接使用clone()方法需要...

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

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

    原型模式实践代码

    在Java、C#等面向对象的语言中,原型模式通过实现`Cloneable`接口或使用序列化机制来实现对象的复制。在这个"原型模式实践代码"中,我们可以预期看到如何在实际编程中应用这一模式。 在Java中,`Cloneable`接口是...

    Prototype模式

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

    Prototype Pattern原型模式

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

    java设计模式之原型模式

    **Java设计模式之原型模式详解** 原型模式(Prototype Pattern)是设计模式中的一种结构型模式,主要用于快速创建对象。在Java中,它基于对象克隆的概念,允许我们复制已有对象而不必再次创建新实例,从而降低系统...

    Java 23种设计模式08原型模式.pdf

    ### Java设计模式之原型模式深度解析 #### 模式动机 在面向对象编程的世界里,对象的创建往往伴随着复杂的逻辑处理。特别是在某些场景下,对象的构造过程可能涉及大量资源的消耗,例如数据库连接、文件读写等。在...

    设计模式之原型模式

    原型模式是设计模式中的一种,它是Java 23种经典设计模式之一,主要用来提高对象创建的效率。在原型模式中,我们通过复制或克隆一个已经存在的对象来创建新的对象,而不是通过构造函数来创建。这种方法尤其适用于当...

    设计模式——原型模式

    原型模式(Prototype Pattern)是一种创建型设计模式,它允许我们通过复制现有的对象来创建新对象,而无需知道具体创建过程的细节。这种模式的核心在于,它提供了一种对象克隆的简便方法,使得对象的创建过程对用户...

    Java设计模式之原型模式在图形绘制框架中的应用

    内容概要:本文详细介绍了 Java 中的原型模式(Prototype Pattern),并通过实例讲解了如何在图形绘制软件中应用该模式。文中定义了抽象原型类和具体原型类,并展示了如何通过客户端代码创建和克隆不同的图形对象,...

Global site tag (gtag.js) - Google Analytics