设计模式-原型模式
程序员文章站
2022-03-02 13:34:30
...
原型模式(Prototype Pattern)
用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
浅复制(浅克隆): 浅复制仅仅复制所考虑的对象,而不复制它所引用的对象。
深复制(深克隆):深复制把要复制的对象所引用的对象都复制了一遍。
Java中对象的克隆,为了获取对象的一份拷贝,我们可以利用Object类的clone()方法。必须要遵循下面三点:
1.在派生类中实现Cloneable接口。
2.在派生类中覆盖基类的clone()方法,并声明为public【Object类中的clone()方法为protected的】。
3.在派生类的clone()方法中,调用super.clone()。
Object类里的clone方法是浅复制(浅克隆)
浅复制:
结果:
深复制:
结果:
注意事项:克隆对象时对象的构造方法不执行
用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
浅复制(浅克隆): 浅复制仅仅复制所考虑的对象,而不复制它所引用的对象。
深复制(深克隆):深复制把要复制的对象所引用的对象都复制了一遍。
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]
注意事项:克隆对象时对象的构造方法不执行
上一篇: 深入入门正则表达式(java) - 匹配原理 - 2 - 回溯
下一篇: 设计模式-单例模式
推荐阅读
-
解析使用enumerator模式简化异步操作的详解
-
C#策略模式(Strategy Pattern)实例教程
-
C#对象为Null模式(Null Object Pattern)实例教程
-
C#单例模式(Singleton Pattern)实例教程
-
C#装饰器模式(Decorator Pattern)实例教程
-
C#模板方法模式(Template Method Pattern)实例教程
-
C#中的IDisposable模式用法详解
-
C#观察者模式(Observer Pattern)实例教程
-
C#迭代器模式(Iterator Pattern)实例教程
-
C#备忘录模式(Memento Pattern)实例教程