設計模式快速學習(五)原型模式

用於建立重複的對象,同時又能保證性能。通俗的講,原型模式就是克隆對象,直接copy字節碼,不走構造方法,性能很是高。ORM中常常用到。java

注意

只支持9種數據類型的深拷貝: 8大基本類型(int long float double boolean char short byte )+String 其餘(List等)數據類型默認都是淺拷貝,可是咱們也能經過他們自身的clone方法來深拷貝。bash

List list = new ArrayList();
        List cloneList = (List) ((ArrayList) list).clone();
複製代碼
Prototype.java

實現Cloneable接口,而且重寫clone()方法。ide

public class Prototype implements Cloneable{
    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
}
複製代碼

:若是不實現該接口而直接調用clone()方法會拋出CloneNotSupportedException異常性能

PeoplePrototype.java

人原型,用來作被拷貝的對象。ui

public class PeoplePrototype extends Prototype{
    private int age;
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}
複製代碼
Main.java
public class Main {
    public static void main(String[] args) {
        PeoplePrototype prototype = new PeoplePrototype();
        prototype.setAge(20);
        prototype.setName("FantJ");
        try {
            PeoplePrototype clone = (PeoplePrototype)prototype.clone();
            System.out.println(clone.getAge());
            System.out.println(clone == prototype);
            System.out.println(clone+" "+prototype);
            System.out.println(clone.getClass()  +" "+ prototype.getClass());
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
        }
    }
}
複製代碼

控制檯打印:this

20
false
com.fantj.prototype.ConcretePrototype@6d6f6e28    com.fantj.prototype.ConcretePrototype@135fbaa4
class com.fantj.prototype.ConcretePrototype     class com.fantj.prototype.ConcretePrototype
複製代碼
相關文章
相關標籤/搜索