簡單的復制粘貼極有可能造成重復代碼的災難, 但是java中提供了克隆的功能, 如果一個對象創建過程復雜,又要頻繁使用, 在初始化信息不發生變化的情況下,應當采取克隆而不是new一個對象
定義
原型模式: 用原型實例指定創建對象的種類,并且通過拷貝這些原型創建新的對象
也就是說, 只需知道原型對象的類型,就可以拷貝,?拷貝分為淺拷貝和深拷貝,可參考淺拷貝和深拷貝
?
模式結構
Prototype: 抽象原型類,聲明克隆接口
ConcretePrototypeA: 具體的原型類, 實現克隆操作
模式實現
在java中,有一個Cloneable接口,它的作用是聲明克隆的能力, 一個類只有實現它才可以被拷貝,然后重寫clone(),否則在運行時會拋出CloneNotSupportedException異常
下面是代碼實現,原型類和具體原型類合為一個了
public class Resume implements Cloneable{private String name;public Resume(String name) {this.name = name;}@Overridepublic Resume clone() throws CloneNotSupportedException {return (Resume)super.clone();}} //客戶端 public class PrototypeMain {public static void main(String[] args) throws Exception {Resume resume = new Resume("張三");System.out.println(resume);System.out.println(resume.clone());} }
優點及使用場景
優點: 簡化對象的創建過程,隱藏了對象創建的細節,又對性能大大的提高
使用場景:
1.頻繁使用一個對象,比如在循環體中
2.創建過程比較復雜,?在初始化信息不發生變化的情況下
?