概念
- 原型简单说就是克隆
原型表面了有一个样板实例,实例是可定制的。原型模式多用于创建复杂的或者构造耗时的实例。这种情况复制一个已存在的实例更高效。
场景
初始化耗资源。
-
使用方式
实现Cloneable接口,作用只有一个,运行时通知虚拟机可安全的在实现了此接口的类上使用clone方法。没实现运行时抛出异常CloneNotSupportedException。
重写Object的clone方法。Object的clone方法是protected类型的,无法调用,需要将作用域提升为public。
拷贝
浅拷贝:基本类型拷贝数据,引用类型拷贝引用地址。
-
演示
```java public class User implements Cloneable{ private String name; private String password; private ArrayList
phones; protected User clone(){
try{
User user = (User)super.clone();//没有下面引用类型就只有浅拷贝
user.phones = (ArrayList<String>) this.phone.clone();//深复制
return user;
}catch(CloneNotSupportedException e){
e.printStackTrace();
}
return null;
} }
//测试
public class Client{
public static void main(String[] args){
//创建User原型对象。
User user = new User();
user.setName(“”);
user.setPassword(“”);
ArrayList
//拷贝一个对象
User u = user.clone();
u.setPassword("");
sout(u == user);//判断是否一个对象
sout(user.getPhones() == u.getPhones)
}
} ```