Java設計模式---原型模式

你好我是辰兮,很高興你能來閱讀,本篇給你介紹Java設計模式之原型模式,通過簡單的案例給你講解,分享給初學者,大家一起進步。



一、序言

在有些系統中,存在大量相同或相似對象的創建問題,如果用傳統的構造函數來創建對象,會比較複雜且耗時耗資源,用原型模式生成對象就很高效,就像孫悟空拔下猴毛輕輕⼀吹就變出很多孫悟空⼀樣簡單。


二、原型模式的定義與特點

原型(Prototype)模式的定義如下:

用⼀個已經創建的實例作爲原型,通過複製該原型對象來創建⼀個和原型相同或相似的新對象。

在這⾥,原型實例指定了要創建的對象的種類。⽤這種⽅式創建對象⾮常⾼效,根本⽆須知道對象創建的細節。

例如,Windows 操作系統的安裝通常較耗時,如果複製就快了很多。在⽣活中複製的例⼦⾮常多,這⾥不⼀⼀列舉了。


三、原型模式的結構與實現

由於 Java 提供了對象的 clone() ⽅法,所以⽤ Java 實現原型模式很簡單。

1、模式的結構

原型模式包含以下主要⻆⾊。

  1. 抽象原型類:規定了具體原型對象必須實現的接⼝。
  2. 具體原型類:實現抽象原型類的 clone() ⽅法,它是可被複制的對象。
  3. 訪問類:使⽤具體原型類中的 clone() ⽅法來複制新的對象。

2、模式的實現

原型模式的克隆分爲淺克隆和深克隆,Java 中的 Object 類提供了淺克隆的 clone() ⽅法,具體原型類只要實現 Cloneable 接⼝就可實現對象的淺克隆,這⾥的 Cloneable 接⼝就是抽象原型類。淺拷貝實現Cloneable,重寫,深拷貝是通過實現Serializable讀取二進制流。

在這裏插入圖片描述

  • 首先我們常見一個類繼承Cloneable接口,然後重寫裏面的clone方法
//具體原型類
public class Realizetype implements Cloneable
{
    Realizetype()
    {
        System.out.println("具體原型創建成功!");
    }
    public Object clone() throws CloneNotSupportedException
    {
        System.out.println("具體原型複製成功!");
        return (Realizetype)super.clone();
    }
}
  • 測試類
//原型模式的測試類
public class PrototypeTest {
    public static void main(String[] args)throws CloneNotSupportedException {

        Realizetype obj1=new Realizetype();
        Realizetype obj2=(Realizetype)obj1.clone();
        System.out.println("obj1==obj2?"+(obj1==obj2));
 
    }
}
具體原型創建成功!
具體原型複製成功!
obj1==obj2?false

實現克隆操作,繼承Cloneable,重寫clone()方法。

原型模式同樣用於隔離類對象的使用者和具體類型(易變類)之間的耦合關係,它同樣要求這些“易變類”擁有穩定的接口。


3、原型模式的應用場景

①對象之間相同或相似,即只是個別的幾個屬性不同的時候。

②對象的創建過程比較麻煩,但複製比較簡單的時候。

public class Citation implements Cloneable {
    String name;
    String info;
    String college;

    public Citation(String name, String info, String college) {
        this.name = name;
        this.info = info;
        this.college = college;
    }

    public String getName() {
        return name;
    }

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

    public String getInfo() {
        return info;
    }

    public void setInfo(String info) {
        this.info = info;
    }

    public String getCollege() {
        return college;
    }

    public void setCollege(String college) {
        this.college = college;
    }


    void display()
    {
        System.out.println(name+info+college);
    }


    public Object clone() throws CloneNotSupportedException
    {
        System.out.println("獎狀拷⻉成功!");
        return (Citation)super.clone();
    }

}

//原型模式的測試類
public class PrototypeTest {
    public static void main(String[] args)throws CloneNotSupportedException {
        Citation obj1=new Citation("盧本偉","同學:在2020學年獲得一等獎學金","武漢大學");
        obj1.display();
        Citation obj2=(Citation) obj1.clone();
        obj2.setName("PDD");
        obj2.display();
    }
}
盧本偉同學:在2020學年獲得一等獎學金武漢大學
獎狀拷⻉成功!
PDD同學:在2020學年獲得一等獎學金武漢大學

注意:除設計模式外。在此免費贈送一套最新Java架構項目實戰教程+大廠面試題庫,有興趣的 點擊此處獲取,沒基礎勿進!


①原型模式(Prototype Pattern)用於創建重複的對象,同時又能保證性能。
②它屬於創建型設計模式,它提供了一種創建對象的最佳方法。
③這種模式是實現了一個原型接口,該接口用於創建當前對象的克隆。當直接創建對象的代價比較大時,則採用這種模式。
④例如,一個對象需要在一個高代價的數據庫操作之後被創建。我們可以緩存該對象,在下一個請求時返回它的克隆,在需要的時候更新數據庫,以此來減少數據庫調用。


The best investment is to invest in yourself

在這裏插入圖片描述

2020.06.02 記錄辰兮的第74篇博客

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章