概念

  • 原型简单说就是克隆
  • 原型表面了有一个样板实例,实例是可定制的。原型模式多用于创建复杂的或者构造耗时的实例。这种情况复制一个已存在的实例更高效。

    场景

  • 初始化耗资源。

  • new初始化繁琐的数据准备或权限。

    使用方式

  • 实现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(){

    1. try{
    2. User user = (User)super.clone();//没有下面引用类型就只有浅拷贝
    3. user.phones = (ArrayList<String>) this.phone.clone();//深复制
    4. return user;
    5. }catch(CloneNotSupportedException e){
    6. e.printStackTrace();
    7. }
    8. return null;

    } }

//测试 public class Client{ public static void main(String[] args){ //创建User原型对象。 User user = new User(); user.setName(“”); user.setPassword(“”); ArrayList phones = new ArrayList(); pgones.add(“”); user.setPhone(phones);

  1. //拷贝一个对象
  2. User u = user.clone();
  3. u.setPassword("");
  4. sout(u == user);//判断是否一个对象
  5. sout(user.getPhones() == u.getPhones)
  6. }

} ```