設(shè)計模式-原型模式

介紹

原型模式(Prototype Pattern)是用于創(chuàng)建重復(fù)的對象,同時又能保證性能。這種類型的設(shè)計模式屬于創(chuàng)建型模式,它提供了一種創(chuàng)建對象的最佳方式。
原型模式多用于創(chuàng)建復(fù)雜的或者耗時的實例,因為這種情況下,復(fù)制一個已經(jīng)存在的實例使程序運行更高效;或者創(chuàng)建值相等,只是命名不一樣的同類數(shù)據(jù)。

優(yōu)點

  1. 性能提高。
  2. 簡化對象的創(chuàng)建

注意事項

  1. 使用原型模式復(fù)制對象不會調(diào)用類的構(gòu)造方法。
  2. 有深拷貝與淺拷貝。

結(jié)構(gòu)圖

這里寫圖片描述

案例

Prototype 類

class Prototype implements Cloneable {
    public Prototype clone(){
        Prototype prototype = null;
        try{
            prototype = (Prototype)super.clone();
        }catch(CloneNotSupportedException e){
            e.printStackTrace();
        }
        return prototype;
    }
}

ConcretePrototype 類

class ConcretePrototype extends Prototype{
    public void show(){
        System.out.println("原型模式實現(xiàn)類");
    }
}

Client類

public class Client {
    public static void main(String[] args){
        ConcretePrototype cp = new ConcretePrototype();
        for(int i=0; i< 10; i++){
            ConcretePrototype clonecp = (ConcretePrototype)cp.clone();
            clonecp.show();
        }
    }
}
這里寫圖片描述

淺克隆和深克隆

淺克隆

只負責(zé)克隆按值傳遞的數(shù)據(jù)(比如基本數(shù)據(jù)類型、String類型),而不復(fù)制它所引用的對象,換言之,所有的對其他對象的引用都仍然指向原來的對象。

深克隆

除了淺度克隆要克隆的值外,還負責(zé)克隆引用類型的數(shù)據(jù)。那些引用其他對象的變量將指向被復(fù)制過的新對象,而不再是原有的那些被引用的對象。換言之,深度克隆把要復(fù)制的對象所引用的對象都復(fù)制了一遍,而這種對被引用到的對象的復(fù)制叫做間接復(fù)制。

說簡單點就是復(fù)制值(淺克隆)還是引用(深克隆).深克隆還存在一個死循環(huán)的問題,所以需要多加注意。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 定義 原型模式屬于對象的創(chuàng)建模式。通過給出一個原型對象來指明所有創(chuàng)建的對象的類型,然后用復(fù)制這個原型對象的辦法創(chuàng)建...
    步積閱讀 1,372評論 0 2
  • 目錄 本文的結(jié)構(gòu)如下: 引言 什么是原型模式 淺克隆和深克隆 clone() 模式的結(jié)構(gòu) 典型代碼 代碼示例 優(yōu)點...
    w1992wishes閱讀 558評論 0 0
  • 原型模式 介紹 在許多面向?qū)ο蟮膽?yīng)用程序中,有些對象的創(chuàng)建代價過大或者過于復(fù)雜。要是可以重建相同的對象并作輕微的改...
    666真666閱讀 461評論 0 2
  • 1大同小異的工作周報 Sunny軟件公司一直使用自行開發(fā)的一套OA (Office Automatic,辦公自動化...
    justCode_閱讀 1,191評論 0 3
  • 原型模式也屬于創(chuàng)造型設(shè)計模式,他是通過復(fù)制一個已經(jīng)存在的對象實例而得到一個新的實例,避免繁瑣的實例化過程。在這里被...
    breezedancer閱讀 1,469評論 0 51