freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

java程序設(shè)計模式程序設(shè)計(參考版)

2024-08-31 17:53本頁面
  

【正文】 38. } 39. public void encrypt(){ 40. (“Java Builder is encrypting”)。 32. } 33. public void link(){ 34. (“Java Builder is linking”)。 24. } 25. //具體 Builder 建造者角色 26. public class JavaBuilder implements Builder { 27. public void edit(){ 28. (“Java Builder is editing”)。 22. public void encrypt()。 19. public void pile()。 13. ()。 11. ()。 9. ()。 4. public Director(Builder builder){ 5. = builder。 Builder建造者設(shè) 計模式的原諒如下: 以軟件編程為例說明 Bulder 建造者設(shè)計模式,在編程中常用步驟為:編輯、編譯、鏈接、壓縮、加密、運行等過程。Director 指導(dǎo) 者相當(dāng)于設(shè)計師或架構(gòu)師,擁有整個產(chǎn)品各個部件之間關(guān)系的構(gòu)建藍(lán)圖。 Builder 模式是一步一步創(chuàng)建一個復(fù)雜的對象,它允許用戶可以只通過指 定復(fù)雜對象的類型和內(nèi)容就可以構(gòu)建它們,用戶不需要了解所構(gòu)建對象的內(nèi)部具體構(gòu)建細(xì) 節(jié), Builder 建造設(shè)計模式的目的是為了將構(gòu)造復(fù)雜對象的過程和它的部件解耦。 45. //學(xué)生 1 的教授不改變 46. (name=++,+age=+)。 43. =lisi。 41. Student s1=new Student(zhangsan,18,p)。 37. return(())。// object of stud 34. / /從流里讀出來 35. ByteArrayInputStream bi=new ByteArrayInputStream(())。 32. ObjectOutputStream oo=new ObjectOutputStream(bo)。 27. =p。 24. Student(String name,int age,Professor p){ 25. =name。 22. int age。 17. =age。 14. int age。上例代碼改進(jìn)如下。 9. return(())。 6. //從流里 讀出來 7. ByteArrayInputStream bi=new ByteArrayInputStream(())。 4. ObjectOutputStream oo=new ObjectOutputStream(bo)。應(yīng)當(dāng)指出的是, 寫在流里的是對象的一個拷貝,而原對象仍然存在于 JVM 里面,因此在 Java 語言里深復(fù)制一個對象,常??梢韵仁箤ο髮崿F(xiàn) Serializable 接口,然后把對象(實際上只是對象的一個拷貝)寫到一個流里,再從流里讀出來便可以重建對象。 46. //學(xué)生 1 的教授不改變 47. (name=++,+age=+)。 44. =lisi。 42. Student s1=new Student(zhangsan,18,p)。 37. return o。 32. }catch(CloneNotSupportedException e){ 33. (())。 27. } 28. public Object clone(){ 29. Student o=null。 25. =age。 22. Professor p。 17. } 18. } 19. class Student implements Cloneable{ 20. String name。 13. }catch(CloneNotSupportedException e){ 14. (())。 8. } 9. public Object clone(){ 10. Object o=null。 5. Professor(String name,int age){ 6. =name。 40. } 那應(yīng)該如何實現(xiàn)深層次的克隆,即修改 s2的教授不會影響 s1的教授?代碼改進(jìn)如下: [java] view plaincopy 1. //Professor 類實現(xiàn)了 Cloneable 接口,不再使用 Object 默認(rèn)的 clone()方法 2. class Professor implements Cloneable{ 3. String name。 37. =30。 35. Student s2=(Student)()。 30. } 31. } 32. public static void main(String[] args){ 33. Professor p=new Professor(wangwu,50)。 26. } 27. //使用 Object 類的 clone()方法 28. =(Professor)()。 22. try{ 23. o=(Student)()。 18. =p。 15. Student(String name,int age,Professor p){ 16. =name。 13. int age。 8. } 9. } 10. //Student 實現(xiàn)了 Cloneable 接口 11. class Student implements Cloneable{ 12. String name。 5. Professor(String name,int age){ 6. =name。以下代碼可以證明: [java] view plaincopy 1. //Professor 沒有實現(xiàn) Cloneable 接口,默認(rèn)使用 類的 clone()方法 2. class Professor{ 3. String name。 26. } 說明: ① 為什么我們在派生類中覆蓋 Object 的 clone()方法時,一定要調(diào)用()呢? 在運行時刻, Object 中的 clone()識別出你要復(fù)制的是哪一個對象,然后為此對象分配空間,并進(jìn)行對象的復(fù)制,將原始對象的內(nèi)容一一復(fù)制到新對象的存儲空間中。 25. (name=++,+age=+)。 23. =lisi。 18. } 19. } 20. public static void main(String[] args){ 21. Student s1=new Student(zhangsan,18)。 14. }catch(CloneNotSupportedException e){ 15. (())。 8. } 9. public Object clone(){ 10. Object o=null。 5. Student(String name,int age){ 6. =name。 pubilc interface Cloneable{ } 例子代碼如下 : [java] view plaincopy 1. class Student implements Cloneable 2. { 3. String name。 為了獲取對象的一份拷貝,我們可以利用 Object 類的 clone()方法,也可以實現(xiàn) Cloneable 接口,覆蓋基類的 clone()方法,在 clone()方法中,調(diào)用()。應(yīng)該成立。//克隆對象與原對象不是同一個對象 ② 對任何的對象 x,都有 ().getClass()== ()。 2. Java 中的 clone()方法 (1)clone()方法將對象復(fù)制了一份并返回給調(diào)用者。不過,無論是對象的值類型字段,還是引用類型字段,都會被重新創(chuàng)建并賦值,對于副本的修改,不會影響到源對象本身。 淺拷貝簡單歸納就是只復(fù)制一個對象,對象內(nèi)部存在指向其他對象,數(shù)組或引用則不復(fù)制。其中,值類型字段 (java 中 8中原始類型 )的值被復(fù)制到副本中 后,在副本中的 修改不會影響到源對象對應(yīng)的值。而 Prototype 原型設(shè)計模式則正好相反,每次都返回的是原型類的不同實例對象。 (2).通過克隆方法創(chuàng)建的原型,雖然也是創(chuàng)建新對象,但是將原型實例對象的數(shù)據(jù)復(fù)制到了新的對象中,相當(dāng)于使用被克隆對象的數(shù)據(jù)作為克隆對象的初始數(shù)據(jù)。 Cloneable 接口是一個標(biāo)記接口 ,也就是沒有任何內(nèi)容 ,定義如下 : [java] view plaincopy 1. package 。 31. } 32. } clone()方法是在 Object中定義的 ,而且是 protected的,只有實 現(xiàn)了 Cloneable接口的類才可以在其實例上調(diào)用 clone()方法,否則會拋出CloneNotSupportException。 28. //通過 clone()方法獲得一個對象拷貝 29. Shape shape2 = (Shape)()。 24. } 25. public static void main(String[] args){ 26. Shape shape = new Circle()。 16. } 17. return null。 9. } 10. //實現(xiàn)了 Colneable 接口的類,可以使用 clone()方法復(fù)制對象 11. public Object clone(){ 12. try{ 13. return ()。 4. public String getShapeName(){ 5. retun shapeName。 Prototype 原型模式允許一個對象再創(chuàng)建另外一個可定制的對象,根本無需知道任何關(guān)于對象創(chuàng)建的細(xì)節(jié)。 抽象工廠 :用來生產(chǎn)不同產(chǎn) 品族 (由不同產(chǎn)品組合成的一套產(chǎn)品 )的全部產(chǎn)品,對于增加新的產(chǎn)品,無能為力;支持增加產(chǎn)品族。 三種工廠模式的區(qū)別: 簡單工廠 : 用來生產(chǎn)同一等級結(jié)構(gòu)中的任意產(chǎn)品,對于增加新的產(chǎn)品,無能為力。 使用工廠模式,返回的實例一定是工廠創(chuàng)建的,而不是從其他對象中獲取的。產(chǎn)品類可以是多種形式,多層繼承或者是單個類都是可以的。 40. ()。 38. factory = new BMWCarFactory()。 36. ICar car = ()。 25. } 26. } 27. //寶馬車工廠 28. class BMWCarFactory extends CarFactory{ 29. public ICar createCar(){ 30. return new BMWCar()。 15. } 16. } 17. //抽象汽車工廠 18. abstract class CarFactory{ 19. public abstract ICar createCar()。 4. } 5. //奔馳車 6. class BenzCar implements ICar{ 7. public void run(){ 8. (“Benz car run”)。工廠方法定義一個用于創(chuàng)建產(chǎn)品的接口,讓子類決定實例化哪一個類,使得類的實例化延遲到子類。 77. } 78. } 抽象工廠指定了產(chǎn)品組合形式,具體的工廠產(chǎn)生具體的產(chǎn)品,抽象工廠適用于多個產(chǎn)品相互組合的情況。
點擊復(fù)制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1