bl双性强迫侵犯h_国产在线观看人成激情视频_蜜芽188_被诱拐的少孩全彩啪啪漫画

java如何實現原型模式

這篇文章主要介紹了java如何實現原型模式,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

美蘭網站制作公司哪家好,找成都創新互聯公司!從網頁設計、網站建設、微信開發、APP開發、成都響應式網站建設公司等網站項目制作,到程序開發,運營維護。成都創新互聯公司于2013年開始到現在10年的時間,我們擁有了豐富的建站經驗和運維經驗,來保證我們的工作的順利進行。專注于網站建設就選成都創新互聯公司

定義:

        通過復制現有的對象實例來創建新的對象實例。

實現:

實現Cloneable接口:

        Cloneable接口的作用是在運行時通知虛擬機可以安全地在實現了此接口的類上使用clone方法。在java虛擬機中,只有實現了這個接口的類才可以被拷貝,否則在運行時會拋出CloneNotSupportedException異常。

重寫Object類中的clone方法:

        Java中,所有類的父類都是Object類,Object類中有一個clone方法,作用是返回對象的一個拷貝,但是其作用域protected類型的,一般的類無法調用,因此,原型類需要將clone方法的作用域修改為public類型。

示例:

例如,對于拿郵件發邀請函,郵件類大部分內容都是一樣的:邀請原由、相邀地點,相聚時間等等,但對于被邀請者的名稱和發送的郵件地址是不同的。

定義Mail類:

public class Mail implements Cloneable {  
  private String receiver;  
  private String subject;  
  private String content;  
  private String tail;  
  public Mail(EventTemplate et) {    
    this.tail = et.geteventContent();    
    this.subject = et.geteventSubject();
  }  
  @Override
  public Mail clone() {
    Mail mail = null;    
  try {
      mail = (Mail) super.clone();      
    } catch (CloneNotSupportedException e) {      
    // TODO Auto-generated catch block
      e.printStackTrace();
    }    return mail;
  }
//get、set.....
}

測試方法:

public static void main(String[] args) {
  int i = 0;
  int MAX_COUNT = 10;
  EventTemplate et = 
new EventTemplate("邀請函(不變)", "婚嫁生日啥的....(不變部分)");
  Mail mail = new Mail(et);  
  while (i < MAX_COUNT) {
    Mail cloneMail = mail.clone();
    cloneMail.setContent("XXX先生(女士)(變化部分)"
   + mail.getTail());
    cloneMail.setReceiver("每個人的郵箱地址...com(變化部分)");
    sendMail(cloneMail);
    i++;
  }

}

優點:

        1、使用原型模型創建一個對象比直接new一個對象更有效率,因為它直接操作內存中的二進制流,特別是復制大對象時,性能的差別非常明顯。
        2、隱藏了制造新實例的復雜性,使得創建對象就像我們在編輯文檔時的復制粘貼一樣簡單。

缺點:

        1、由于使用原型模式復制對象時不會調用類的構造方法,所以原型模式無法和單例模式組合使用,因為原型類需要將clone方法的作用域修改為public類型,那么單例模式的條件就無法滿足了。
        2、使用原型模式時不能有final對象。
        3、Object類的clone方法只會拷貝對象中的基本數據類型,對于數組,引用對象等只能另行拷貝。這里涉及到深拷貝和淺拷貝的概念。

深拷貝與淺拷貝:

淺拷貝:

        將一個對象復制后,基本數據類型的變量都會重新創建,而引用類型,指向的還是原對象所指向的(這樣不安全)。

深拷貝:

        將一個對象復制后,不論是基本數據類型還有引用類型,都是重新創建的。

那么深拷貝如何具體實現呢?

繼續上面的例子,增加了一個ArrayList屬性。

private String receiver;
private String subject;
private String content;
private String tail;
private ArrayList<String> ars;

此時,單mail = (Mail) super.clone();無法將ars指向的地址區域改變,必須另行拷貝:

try {
    mail = (Mail) super.clone();    
    mail.ars = (ArrayList<String>)this.ars.clone();
   } catch (CloneNotSupportedException e) {
     e.printStackTrace();
}

適用場景:

        1、復制對象的結構和數據。
        2、希望對目標對象的修改不影響既有的原型對象。
        3、創建一個對象的成本比較大。

感謝你能夠認真閱讀完這篇文章,希望小編分享的“java如何實現原型模式”這篇文章對大家有幫助,同時也希望大家多多支持創新互聯,關注創新互聯行業資訊頻道,更多相關知識等著你來學習!

文章題目:java如何實現原型模式
網頁路徑:http://vcdvsql.cn/article20/iijcco.html

成都網站建設公司_創新互聯,為您提供響應式網站Google自適應網站企業建站網站收錄網頁設計公司

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

商城網站建設