问题:
现在有一只羊(包含属性:名字Dolly、年龄2),需要克隆10只属性完全相同的羊。
一般解法(首先想到的方法):
1.定义Sheep类表示羊,包括构造器、getter()和toString()。
public class Sheep {
private String name;
private int age;
public Sheep(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
@Override
public String toString() {
return "Sheep{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
2.在客户端实例化多利,然后再根据多利的属性去实例化10只羊。
public class Client {
public static void main(String[] args) {
Sheep sheepDolly=new Sheep("Dolly",2);
Sheep sheep1 = new Sheep(sheepDolly.getName(), sheepDolly.getAge());
Sheep sheep2 = new Sheep(sheepDolly.getName(), sheepDolly.getAge());
Sheep sheep3 = new Sheep(sheepDolly.getName(), sheepDolly.getAge());
//....
System.out.println(sheep1+",hashCode:"+sheep1.hashCode());
System.out.println(sheep2+",hashCode:"+sheep2.hashCode());
System.out.println(sheep3+",hashCode:"+sheep3.hashCode());
//...
}
}
3.运行结果
hashcode
hashcode就是在hash表中有对应的位置。
通过对象的内部地址(也就是物理地址)转换成一个整数,然后该整数通过hash函数的算法就得到了hashcode。
4.缺点
每次创建新对象时需要获取原始对象的属性,对象复杂时效率很低;此外不能动态获得对象运行时的状态,若类增减属性需要改动代码
原型模式
原型模式(Prototype Pattern)是一种创建型设计模式,用一个已经创建的实例作为原型,通过复制该原型对象来创建一个新对象
工作原理:将原型对象传给要复制的对象,这个要复制的对象通过请求原型对象拷贝它们,自己来实施创建。即用基类Object的clone()方法或序列化或映射。