设计模式之原型模式
原型模式:克隆出一个拷贝对象,分深克隆和浅克隆
深克隆:对象内部的所有内容都复制一遍(指的是引用对象)
浅克隆:对象内部的东西直接复用(指的是引用对象)
下面是提供测试得服务方内容
//实现标记接口,代表可以克隆
//当创建对象比较麻烦的时候可以采用克隆模式。可以使用java自带支持的克隆接口。也可以不使用(使用自己编写的接口)
// java底层实现克隆的方式直接拷贝二进制(所以当创建对象的消耗比较大的时候可以使用)
public class SeverUnit implements Cloneable{
private int a;
private User user;
public int getA() {
return a;
}
public void setA(int a) {
this.a = a;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
@Override
public SeverUnit clone() throws CloneNotSupportedException {
SeverUnit clone = (SeverUnit) super.clone();//这里只是浅克隆
if(this.user!=null){
clone.user = this.user.clone();//深度克隆
}
return clone;
}
@Override
public String toString() {
return "SeverUnit{" +
"a=" + a +
", user=" + user +
'}';
}
}
public class User implements Cloneable{
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
'}';
}
@Override
public User clone() throws CloneNotSupportedException {
return (User)super.clone();
}
}
测试客户端
public class prototypeClient {
public static void main(String[] args) throws CloneNotSupportedException {
SeverUnit unit = new SeverUnit();
unit.setA(10);
User user = new User();
user.setName("123");
unit.setUser(user);
SeverUnit clone = unit.clone();
System.out.println(clone);
System.out.println(clone.getUser().equals(user));
}
}