原型模式(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常用设计模式-原型模式
Java设计模式-原型模式详解
C++设计模式-创建型模式-原型模式;C++实现的关键 拷贝构造函数
设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段...
JAVA-设计模式-创建型模式-原型模式
2. 为什么需要接口Cloneable 3. java什么时候会抛出CloneNotSupportedException异常 4. 流的概念 5. 什么是序列化
c++20设计模式-第4章-原型模式代码
一个演示在iOS应用开发中如何使用原型设计模式的Demo
C#23种设计模式样例代码和UML图等 创建型模式(抽象工厂模式、工厂方法模式、单例模式、建造者模式、原型模式); 行为型模式(策略模式、 迭代器模式、原型模式、职责链模式、 模板方法、 命令模式、 解释器模式、 ...
设计模式专题之(五)原型模式---设计模式原型模式示例代码(python--c++)
设计模式-原型模式源代码
java 23种设计模式之原型模式:用原型实例指定创建对象的种类,并通过复制、克隆这些原型创建新的对象。
创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式,共十一种:...
设计模式05-建造者、原型模式 设计模式06-适配器、桥接、组合模式 设计模式07-组合模式、装饰模式 设计模式09-外观模式、享元模式 设计模式10-代理模式、结构型模式大复习 设计模式11-行为模式-责任链、命令模式 ...
设计模式的原型模式的例子,希望对大家有用~~~~~~~~
1. 24设计模式-桥接模式7.实例化2.桥接模式优缺点优:桥接模式概念介绍桥接模式uml图介绍原型模式-实例说明-模拟毛笔原型模式-实例代码DocumentB
该代码是android应用设计模式之原型模式小例子
最新设计模式超级详解课程,课程深入浅出的探讨...├─day01-总览设计模式-05-创建型模式-原型模式.mp4 ├─day01-总览设计模式-06-创建型模式-工厂-简单工厂模式.mp4 ├─day01-总览设计模式-07-创建型模式-工厂-工厂
这个是http://blog.csdn.net/dawanganban/article/details/9900539博客中java设计模式的源代码。下载前请先看《设计模式——原型模式》一文。