设计模式之原型模式

来源:互联网 发布:朋友圈推广软件 编辑:程序博客网 时间:2024/06/15 20:12

描述:原型模式说白了就是拷贝一个已知对象,核心方法是实现了Cloneable接口的clone()方法,分为浅拷贝和深拷贝,两者区别在于浅拷贝只是复制了对象,而内部数据是共享的,而深拷贝是数据不共享;


UML类图如下:


测试代码如下:

1、实现Cloneable接口对象

package com.java.prototype;import java.util.ArrayList;public class PrototypeClass implements Cloneable {private ArrayList<String> list = new ArrayList<String>();@SuppressWarnings("unchecked")@Overrideprotected Object clone() throws CloneNotSupportedException {PrototypeClass instance = (PrototypeClass)super.clone();//instance.list.clone();instance.list = (ArrayList<String>)this.list.clone(); //不加这句是浅拷贝return instance;}public ArrayList<String> getList() {return list;}public void setList(ArrayList<String> list) {this.list = list;}@Overridepublic String toString() {return "这是原型模式...";}}


2、测试类(浅拷贝和深拷贝)

package com.java.prototype;import java.util.List;public class PrototypeTest {public static void main(String[] args) {PrototypeClass cloneObj;//对Prototype进行复制PrototypeClass prototype = new PrototypeClass();prototype.getList().add("张三");try {cloneObj = (PrototypeClass)prototype.clone();cloneObj.getList().add("李四");List<String> list = prototype.getList();System.out.println(prototype.toString());for(String str : list){System.out.println(str);}} catch (CloneNotSupportedException e) {e.printStackTrace();}}}

3、测试结果:

浅拷贝

这是原型模式...张三李四


深拷贝

这是原型模式...张三





0 0