1. 程式人生 > >java設計模式-原型(prototype)

java設計模式-原型(prototype)

需要 nal ava === exc AR 多資源 創建對象 ()

有時候創建對象是需要耗費很多資源,但是每個對象之間又有大量的重復。我們可以選擇在創建好一個對象後,以之作為模板克隆出其他對象,稍作修改,即可用於其他地方。

需要實現Cloneable接口,重寫clone()方法。其實就是調用的Object類的clone()方法。

克隆對象只是復制了原對象的數據,每個對象還是獨立的,他們的內存地址不同。

/**
 * Created by wangbin10 on 2018/5/18.
 */
public class Prototype2 implements Cloneable,Serializable {
    private static final long
serialVersionUID = 2L; private String name; private Integer payAmount; private String msg; public Prototype2() { } public Prototype2(String name, Integer payAmount, String msg) { this.name = name; this.payAmount = payAmount; this.msg = msg; }
public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getPayAmount() { return payAmount; } public void setPayAmount(Integer payAmount) { this.payAmount = payAmount; } public String getMsg() {
return msg; } public void setMsg(String msg) { this.msg = msg; } public Prototype2 clone() throws CloneNotSupportedException { Prototype2 clone = (Prototype2) super.clone(); return clone; } }

/**
 * Created by wangbin10 on 2018/5/18.
 */
public class PTest {
    public static void main(String[] args) throws CloneNotSupportedException {
        Prototype2 p1=new Prototype2("zhangsan",23,"hello!welcome to beijing!");
        System.out.println(p1.getName()+p1.getPayAmount()+p1.getMsg());
        Prototype2 p2 = p1.clone();
        p2.setName("lisi");
        p2.setPayAmount(24);
        System.out.println(p2.getName()+p2.getPayAmount()+p2.getMsg());
        System.out.println("============================");
        System.out.println(p1.getName()+p1.getPayAmount()+p1.getMsg());

    }
}

java設計模式-原型(prototype)