原型模式(构造函数实现)
原型模式:以一个对象为基础,创建一个新的对象
浅复制:如果对象包含引用数据类型(非字符串),新对象与原对象的引用类型数据的地址相同
深复制:新对象与原对象中的引用类型数据内容相同,地址不同
*********************************************
示例
***********************************
浅复制
class Address{
private Integer id;
private String name;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
class Person{
private String name;
private Integer age;
private Address address;
public Person(){
}
public Person(Person person){
this.name=person.getName();
this.age=person.getAge();
this.address=person.getAddress();
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}
@Override
public String toString() {
return this.name+" "+this.age+" "+this.address+" "+super.toString();
}
}
public class MyTest {
public static void main(String[] args){
Address address=new Address();
address.setId(1);
address.setName("新世界");
Person person=new Person();
person.setName("瓜田李下");
person.setAge(24);
person.setAddress(address);
System.out.println(person);
Person person2=new Person(person);
System.out.println(person2);
}
}
***************************
控制台输出
瓜田李下 24 hello4.Address@49097b5d hello4.Person@2f4d3709
瓜田李下 24 hello4.Address@49097b5d hello4.Person@6e2c634b
**************************************
深复制
class Address{
private Integer id;
private String name;
public Address(){
}
public Address(Address address){
this.id=address.getId();
this.name=address.getName();
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
class Person{
private String name;
private Integer age;
private Address address;
public Person(){
}
public Person(Person person){
this.name=person.getName();
this.age=person.getAge();
this.address=new Address(person.getAddress());
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}
@Override
public String toString() {
return this.name+" "+this.age+" "+this.address+" "+super.toString();
}
}
public class MyTest {
public static void main(String[] args){
Address address=new Address();
address.setId(1);
address.setName("新世界");
Person person=new Person();
person.setName("瓜田李下");
person.setAge(24);
person.setAddress(address);
System.out.println(person);
Person person2=new Person(person);
System.out.println(person2);
}
}
******************************
控制台输出
瓜田李下 24 hello4.Address@49097b5d hello4.Person@2f4d3709
瓜田李下 24 hello4.Address@37a71e93 hello4.Person@6e2c634b