`
zzg
  • 浏览: 124504 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

Prototype-原型模式(四)

阅读更多

我们手头上已经得到一个Product实例了,现在我们由于业务的要求,需要再获取若干个完全一样或相近的Product,好完成其他的工作。这个 时候我们要做的工作就是复制一个。按照以往的做法,我们是每要求复制出一个的时候,我们会先new出一个对象,然后逐个属性地先从样板Product中 get出来再set到新对象中去。

java 代码
 
  1. public class ClassSample {   
  2.   
  3.   private String attrA = null;   
  4.   
  5.   private String attrB = null;   
  6.   
  7.   ......   
  8.   
  9.   // setter and getter   
  10. }  
java 代码
 
  1. // cs1为得到的样本
  2. ClassSample cs2 = new ClassSample();   
  3. cs2.setAttrA( cs1.getAttrA() );   
  4. cs2.setAttrB( cs1.getAttrB() );   
  5. ......  

 程序员总是为如何能够更懒惰而勤奋地努力着。这样的劳模可不是好的程序员该做的事,这种烦琐而重复性高的复制能不能只写一遍呢?答案是“可以”,而且很简单。我们只需要在原型对象中增加一个clone()函数即可,由类本身来帮我们完成这个复制工作。

java 代码
 
  1. public class ClassSample {  
  2.   private String attrA = null;  
  3.   
  4.   private String attrB = null;  
  5.   ......  
  6.   
  7.   // settter and getter  
  8.   
  9.   // clone  
  10.   public ClassSample clone() {  
  11.     ClassSample cs = new ClassSample();  
  12.     cs.setAttrA(this.attrA);  
  13.     cs.setAttrB(this.attrB);  
  14.     return cs;  
  15.   }  
  16. }  

 这样,复制创建对象就简单了很多了。

java 代码
  1. ClassSample cs2 = cs1.clone();  

 本来故事到这里便结束了。可是由于Java为我们做了更多,让我们更方便地使用Prototype模式,为了让懒惰进行到底,也同时体谅一下 Java的良苦用心,有义务要在这里说说Java为我们做的Prototype模式的简化。大家都知道在Java中所有的类都是 java.lang.Object的子类,而且在Object中已经定义了clone()方法。通过使用这个clone()方法我们就可以简单方便地进行 复制创建了。

可是这个clone()方法可不能随便使用,冒失失地调用surper.clone()是会抛出CloneNotSupportedException异常的。我们还需要实现Cloneable接口才行。

java 代码
 
  1. public class ClassSample implements Cloneable {    
  2.   private String attrA = null;    
  3.     
  4.   private String attrB = null;    
  5.   ......    
  6.     
  7.   // settter and getter    
  8.     
  9.   // clone    
  10.   public ClassSample clone() throws CloneNotSupportedException {    
  11.     ClassSample cs = (ClassSample) super.clone();  
  12.     return cs;    
  13.   }    
  14. }  

简单的一句super.clone()就可以完成我们的各种setter,getter操作。确实很方便。 

我们在进行clone的时候仍然使用下面的句子就可以进行对象复制创建了。

java 代码
ClassSample cs2 = cs1.clone();

同时要考虑到深拷贝与浅拷贝的问题。

分享到:
评论

相关推荐

    ava常用设计模式-原型模式

    ava常用设计模式-原型模式 原型模式(Prototype Pattern)是一种创建型设计模式,允许通过复制现有对象来创建新对象,而不是通过实例化类来创建新对象。在需要创建大量相似对象时非常有用,它可以避免重复创建对象...

    Prototype Pattern原型模式

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

    01-02-02-原型模式详解1

    原型模式(Prototype Pattern)是一种创建型设计模式,它允许我们通过复制现有的对象来创建新对象,而无需知道具体创建过程的细节。这种模式在处理对象的创建时,特别是在需要大量相似对象时,能够提高效率,避免了...

    c++20设计模式-第4章-原型模式代码

    原型模式(Prototype Pattern)是其中一种行为设计模式,它允许我们通过复制现有对象来创建新对象,而不是通过传统方式实例化新对象。这一模式尤其适用于创建复杂或昂贵的对象,因为它提供了对象克隆的能力,从而...

    设计模式专题之(五)原型模式---设计模式原型模式示例代码(python--c++)

    原型模式是一种创建型设计模式,它提供了一种创建对象的最佳方式。在原型模式中,一个对象可以被克隆以创建新对象,而无需知道具体的创建细节。这种模式在需要重复创建相似对象时非常有用,避免了每次创建新对象时都...

    C++设计模式-原型模式

    原型模式(Prototype Pattern)是软件设计模式中的一种创建型模式,它提供了一种复制已有对象而不必知道其具体类别的方法。在C++中,原型模式常常利用拷贝构造函数或赋值运算符来实现对象的克隆。这种模式在需要频繁...

    原型设计模式prototype

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

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

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

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

    即原型模式,提供一个已经存在的对象进行新对象创建的接口,一般情况下都是使用Clone接口。 此模式非常简单,简单的说就是复制多个当前对象供使用。Prototype模式允许一个对象再创建另外一个可定制的对象,根本...

    prototype-demo.zip

    在软件设计领域,原型模式(Prototype Pattern)是一种创建型设计模式,它允许我们通过复制现有的对象来创建新对象,而不是通过传统的构造函数方式。原型模式主要用于简化实例化过程,特别是当对象的创建成本较高...

    Python库 | cngi_prototype-0.0.18.tar.gz

    `cngi_prototype`库很可能包含了一系列与原型模式相关的函数和类,为开发者提供了便捷的接口,用于实现原型对象的创建和复制。这使得开发者能够在项目中轻松集成这一模式,提高代码复用性和灵活性。 在后端开发中,...

    IOS设计模式浅析之原型模式(Prototype)--copy - iOS知识库1

    iOS中的原型模式(Prototype)是一种设计模式,它允许我们通过复制已有对象来创建新的对象,而无需知道具体的创建过程。这种模式在某些情况下能够提高代码的可复用性和效率,特别是当创建新对象的步骤复杂时。 原型...

    Python库 | pyclesperanto_prototype-0.4.1.tar.gz

    pyclesperanto_prototype遵循了原型模式的设计理念,这允许开发者快速地创建和测试新的图像处理算法。原型模式允许通过复制现有对象来创建新对象,简化了创建过程,尤其适合于复杂算法的迭代开发。 2. **开发语言*...

    value-callic-prototype-change.rar_Change

    标题中的"Value Callic Prototype Change"指的是在JavaScript编程中,关于对象原型(prototype)和值类型函数(value function)的变化情况。在JavaScript中,对象可以通过原型链共享属性和方法,而值类型(如Number...

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

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

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

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

    iOS设计模式-原型设计模式

    在iOS开发中,我们可以通过实现NSCopying协议来利用原型模式。 首先,要使用原型设计模式,我们需要定义一个原型类,这个类通常包含一个拷贝自身的方法,比如`copyWithZone:`。这个方法会创建一个与当前对象相同的...

    Prototype模式

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

    C#视频-面向对象设计模式纵横谈(6):Prototype 原型模式(创建型模式)

    在本课程中,我们将深入探讨C#编程中的一个重要设计模式——Prototype原型模式,它是创建型设计模式的一种。原型模式主要用于简化实例化过程,通过复制已有对象来创建新对象,而不是直接通过构造函数来创建。这一...

    原型模式(Prototype)

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

Global site tag (gtag.js) - Google Analytics