`
DanielHan
  • 浏览: 57100 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
074641d7-eb86-343f-a745-65a0f693edb5
设计模式
浏览量:7363
社区版块
存档分类
最新评论

设计模式-原型模式

阅读更多
原型模式(Prototype Pattern)
用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。

浅复制(浅克隆): 浅复制仅仅复制所考虑的对象,而不复制它所引用的对象。 
深复制(深克隆):深复制把要复制的对象所引用的对象都复制了一遍。
 
Java中对象的克隆,为了获取对象的一份拷贝,我们可以利用Object类的clone()方法。必须要遵循下面三点:
1.在派生类中实现Cloneable接口。
2.在派生类中覆盖基类的clone()方法,并声明为public【Object类中的clone()方法为protected的】。 
3.在派生类的clone()方法中,调用super.clone()。 
Object类里的clone方法是浅复制(浅克隆)

浅复制:
public class Demo implements Cloneable{
	private ArrayList<String> arrayList;

	public ArrayList<String> getArrayList() {
		return arrayList;
	}

	public Demo(){
		arrayList=new ArrayList<String>();
	}
	
	@Override
	protected Object clone() throws CloneNotSupportedException {
		return super.clone();
	}
	
	public static void main(String[] args) throws CloneNotSupportedException {
		Demo demo1=new Demo();
		demo1.getArrayList().add("1");
		Demo demo2=(Demo) demo1.clone();
		demo2.getArrayList().add("2");
		System.out.println("demo1:"+demo1.getArrayList());
		System.out.println("demo2:"+demo2.getArrayList());
	}

}


结果:
demo1:[1, 2]
demo2:[1, 2]


深复制:
public class Demo implements Cloneable{
	private ArrayList<String> arrayList;

	public ArrayList<String> getArrayList() {
		return arrayList;
	}

	public Demo(){
		arrayList=new ArrayList<String>();
	}
	
	@Override
	protected Object clone() throws CloneNotSupportedException {
		Demo demo= (Demo) super.clone();
		demo.arrayList=(ArrayList<String>) this.arrayList.clone();
		return demo;
	}
	
	public static void main(String[] args) throws CloneNotSupportedException {
		Demo demo1=new Demo();
		demo1.getArrayList().add("1");
		Demo demo2=(Demo) demo1.clone();
		demo2.getArrayList().add("2");
		System.out.println("demo1:"+demo1.getArrayList());
		System.out.println("demo2:"+demo2.getArrayList());
	}

}


结果:
demo1:[1]
demo2:[1, 2]


注意事项:克隆对象时对象的构造方法不执行

分享到:
评论

相关推荐

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

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

    Java设计模式-原型模式详解

    Java 设计模式 - 原型模式详解 原型模式是 Java 设计模式之一,它用于创建对象时,指定创建对象的类型,并通过拷贝这些原型创建新的对象。该模式的思想就是将一个对象作为原型,对其进行复制、克隆,产生一个和原...

    java设计模式-原型模式

    设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段...

    JAVA-设计模式-创建型模式-原型模式

    JAVA-设计模式-创建型模式-原型模式

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

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

    24设计模式-原型模式1

    原型模式是一种设计模式,主要目的是通过复制现有对象来创建新对象,从而简化创建过程并减少对象构造的开销。在Java中,实现原型模式通常涉及`Cloneable`接口和`clone()`方法。`Cloneable`接口是一个标记接口,类...

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

    在iOS应用开发中,设计模式是一种经过验证的解决常见编程问题的方法,它们是经验的结晶,可以帮助开发者写出可维护、可扩展的代码。本文将详细探讨"原型设计模式"(Prototype Design Pattern)及其在iOS中的应用。 ...

    C#23种设计模式样例代码和UML图

    C#23种设计模式样例代码和UML图等 创建型模式(抽象工厂模式、工厂方法模式、单例模式、建造者模式、原型模式); 行为型模式(策略模式、 迭代器模式、原型模式、职责链模式、 模板方法、 命令模式、 解释器模式、 ...

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

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

    设计模式-Java语言中的应用

    设计模式通常分为三类:创建型模式(如工厂模式、抽象工厂模式、单例模式、建造者模式、原型模式),结构型模式(如适配器模式、装饰器模式、代理模式、桥接模式、组合模式、外观模式、享元模式)以及行为型模式(如...

    java设计模式---诙谐易懂版

    根据给定文件内容,以下是关于Java设计模式的知识点说明: 1. 策略模式(Strategy Pattern)是一种行为设计模式,允许在运行时选择算法的行为。策略模式的意图是定义一系列算法,将每个算法封装起来,并使它们可以...

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

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

    Java设计模式----通俗易懂版

    这个资源"Java设计模式----通俗易懂版"显然是一个专门针对初学者或需要深入理解设计模式的开发者编写的指南。作者以形象生动的例子解释了23种经典的Java设计模式,使得复杂的概念变得更加易于理解。 首先,我们要...

    软件设计模式--填空题+简答题(复习7).rar

    2. **设计模式分类**:设计模式通常分为三类:创建型模式(如工厂方法、抽象工厂、单例、建造者、原型)、结构型模式(如适配器、桥接、装饰、组合、代理、外观、享元)和行为型模式(如责任链、命令、解释器、迭代...

    C# 设计模式系列教程-原型模式

    原型模式是一种设计模式,它允许我们通过复制现有对象来创建新对象,而不是从零开始构造它们。这种模式尤其适用于那些初始化过程复杂、耗时较长的对象,因为它能显著提高性能。 在C#中,原型模式通常通过实现`...

    设计模式之原型模式

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

    JAVA设计模式-chm版

    这个“JAVA设计模式-chm版”资源显然包含了关于Java设计模式的详细信息,便于理解和应用。设计模式是对常见问题的解决方案的标准化描述,它们在软件工程中起到了重要的作用,帮助开发者创建可维护、可扩展且易于理解...

    设计模式-C++

    创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式,共十一种:...

    设计模式课件大全

    设计模式05-建造者、原型模式 设计模式06-适配器、桥接、组合模式 设计模式07-组合模式、装饰模式 设计模式09-外观模式、享元模式 设计模式10-代理模式、结构型模式大复习 设计模式11-行为模式-责任链、命令模式 ...

Global site tag (gtag.js) - Google Analytics