什么是原型设计模式?
原型模式其实就是一个对象再创建另一个与原对象相同内容对象,而让创建过程不知道任何细节的方法.
为什么要使用原型设计模式?
在面向对象编程过程中常常会碰见需要复制对象的情况,所以这是我们就会使用原型模式,原型模式又叫克隆方法.
怎么使用原型设计模式?
原型模式原理其实很简单,例如我们有个Student.class要对它进行克隆,那么定义一个MyCloneAble的接口,接口中提供一个Clone()的方法,Student.class实现该接口,并在Clone()方法中返回被克隆的对象(克隆的对象即new出来把当前对象的值付给它即可.)基本UML
代码具体实现:
MyCloneAble.interface
public interface MyCloneable { public Object myClone(); }
Student.class
public class Student implements MyCloneable{ private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public Object myClone() { // TODO Auto-generated method stub Student student = new Student(); student.setAge(this.age); student.setName(this.name); return student; } }
Main.class
public class Main { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Student s1 = new Student(); s1.setAge(20); s1.setName("huangli"); Student s2 = (Student)s1.myClone(); System.out.println("name "+s2.getName()+" age "+s2.getAge()); } }
输出为
name huangli age 20
java中的clone,在java中我们如果需要去clone一个对象就不需要去自己定义MyCloneAble接口了,因为Clone这个功能实在是太常用了,java的sdk早就为我们封装好了方法,而且使用起来也是很简单的.
java的sdk为我们提供了Cloneable接口,具体介绍如下
然后Object有一个clone()方法
具体实现克隆的做法要求是:
1,必须实现Cloneable接口(这个接口没有方法,只起到mark作用)
2,重写Object中clone()方法并将该方法权限改为public,其中里面的super()方法必须执行!该方法返回的对象即为clone对象。
浅克隆和深克隆
所谓的浅度克隆就是在克隆过程中只克隆了基本数据类型,对于类对象只克隆了该对象的引用而没有克隆对象本身。
深克隆呢,就是它不光克隆基本数据类型,对于类对象也一起克隆.如果想要实现深克隆,只需要对需要克隆的类内部类对象实行浅克隆即可.