日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

原型模式——HeadFirst设计模式学习笔记

發(fā)布時(shí)間:2025/4/16 asp.net 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 原型模式——HeadFirst设计模式学习笔记 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

原型模式:通過復(fù)制一個(gè)已經(jīng)存在的實(shí)例來返回新的實(shí)例,而不是新建實(shí)例.被復(fù)制的實(shí)例就是我們所稱的原型,這個(gè)原型是可定制的(clone)

?

特點(diǎn):

  • 向用戶隱藏了創(chuàng)建新實(shí)例的復(fù)雜性
  • 讓用戶可以產(chǎn)生未知類型的對象,即只需知道對象實(shí)現(xiàn)了哪些接口,而無需知道具體是哪種實(shí)現(xiàn)
  • 在某些情況下,復(fù)制對象比創(chuàng)建對象更高效

?

?

Prototype類需要具備以下兩個(gè)條件:

?

  • 實(shí)現(xiàn)Cloneable接口。在java語言有一個(gè)Cloneable接口,它的作用只有一個(gè),就是在運(yùn)行時(shí)通知虛擬機(jī)可以安全地在實(shí)現(xiàn)了此接口的類上使用clone方法。在java虛擬機(jī)中,只有實(shí)現(xiàn)了這個(gè)接口的類才可以被拷貝,否則在運(yùn)行時(shí)會拋出CloneNotSupportedException異常。
  • 重寫Object類中的clone方法。Java中,所有類的父類都是Object類,Object類中有一個(gè)clone方法,作用是返回對象的一個(gè)拷貝,但是其作用域protected類型的,一般的類無法調(diào)用,因此,Prototype類需要將clone方法的作用域修改為public類型。

?

?

注意復(fù)制對象時(shí)的淺拷貝與深拷貝:

  • 淺拷貝: 對值類型的成員變量進(jìn)行值的復(fù)制,對引用類型的成員變量只復(fù)制引用,不復(fù)制引用的對象
  • 深拷貝: 對值類型的成員變量進(jìn)行值的復(fù)制,對引用類型的成員變量也進(jìn)行引用對象的復(fù)制

注意:

  • 使用原型模式復(fù)制對象不會調(diào)用類的構(gòu)造方法。因?yàn)閷ο蟮膹?fù)制是通過調(diào)用Object類的clone方法來完成的,它直接在內(nèi)存中復(fù)制數(shù)據(jù),因此不會調(diào)用到類的構(gòu)造方法
  • 單例模式與原型模式是沖突的,在使用時(shí)要特別注意

?

實(shí)現(xiàn)深拷貝的克隆:

1 public class Prototype implements Cloneable { 2 private ArrayList list = new ArrayList(); 3 public Prototype clone(){ 4 Prototype prototype = null; 5 try{ 6 prototype = (Prototype)super.clone(); 7 prototype.list = (ArrayList) this.list.clone(); 8 }catch(CloneNotSupportedException e){ 9 e.printStackTrace(); 10 } 11 return prototype; 12 } 13 }

?

轉(zhuǎn)載于:https://www.cnblogs.com/HectorHou/p/6045181.html

總結(jié)

以上是生活随笔為你收集整理的原型模式——HeadFirst设计模式学习笔记的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。