## java设计模式--原型模式
```package CreationalPatterns.PrototypePattern;
public class Sheep implements Cloneable{
public Sheep(String name, String colour, int age) {
this.name = name;
this.colour = colour;
this.age = age;
}
@Override
public String toString() {
return "Sheep{" +
"age=" + age +
", name='" + name + '\'' +
", colour='" + colour + '\'' +
'}';
}
private int age;
private String name;
private String colour;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getColour() {
return colour;
}
public void setColour(String colour) {
this.colour = colour;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
//重写该实例,使用默认的克隆方法
@Override
protected Object clone() {
Sheep sheep= null;
try {
sheep = (Sheep)super.clone();
}catch(Exception e){
System.out.println(e.getMessage());
}
return sheep;
}
}
使用方式
Sheep s1 = new Sheep("多利", "白色", 10);
Sheep s2 = (Sheep) s1.clone();
案例:
Spring中配置beans.xml文件时,scope属性应用到了原型模式获取bean
public Sheep friend;//定义一个Sheep对象作为Sheep类的属性friend
测试:
Sheep s1 = new Sheep("懒洋洋", "白色", 10);
s1.friend = new Sheep("沸羊羊","黑色",11);
Sheep s6 = (Sheep) s1.clone();
System.out.println(s1);
System.out.println(s6);
System.out.println(s1.friend);
System.out.println(s6.friend);
System.out.println(s1.friend==s6.friend);//判断s1和s6的friend是不是同一个
结果:
Sheep{age=10, name='懒洋洋', colour='白色'}
Sheep{age=10, name='懒洋洋', colour='白色'}
Sheep{age=11, name='沸羊羊', colour='黑色'}
Sheep{age=11, name='沸羊羊', colour='黑色'}
true
浅拷贝:
1)对于数据类型是基本类型的成员变量,浅拷贝会直接进行值传递,也就是将该属性值复制一份给新的对象;
2)对于数据类型是引用类型的成员变量,那么钱拷贝会进行引用传递;
3)浅拷贝是使用默认的clone()方法来实现
深拷贝:
1)包含浅拷贝的复制内容,为所有引用数据类型的成员变量申请存储空间,并复制引用类型成员变量所引用的对象.
2)实现方式1:重写clone方法
实现方式2:通过对象序列化
java设计模式--原型模式
最新推荐文章于 2024-10-17 19:11:48 发布