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

正文內(nèi)容

java程序設(shè)計模式程序設(shè)計(存儲版)

2024-10-06 17:53上一頁面

下一頁面
  

【正文】 5. class AndroidStyle implements Style{ 26. public void showStyle(){ 27. (“This is Android style”)。 58. } 59. } 60. //Android 皮膚工廠 61. class AndroidSkinFactory implements SkinFactory{ 62. public Style getStyle(){ 63. return new AndroidStyle()。工廠方法定義一個用于創(chuàng)建產(chǎn)品的接口,讓子類決定實例化哪一個類,使得類的實例化延遲到子類。 36. ICar car = ()。 使用工廠模式,返回的實例一定是工廠創(chuàng)建的,而不是從其他對象中獲取的。 4. public String getShapeName(){ 5. retun shapeName。 28. //通過 clone()方法獲得一個對象拷貝 29. Shape shape2 = (Shape)()。而 Prototype 原型設(shè)計模式則正好相反,每次都返回的是原型類的不同實例對象。 2. Java 中的 clone()方法 (1)clone()方法將對象復(fù)制了一份并返回給調(diào)用者。 pubilc interface Cloneable{ } 例子代碼如下 : [java] view plaincopy 1. class Student implements Cloneable 2. { 3. String name。 18. } 19. } 20. public static void main(String[] args){ 21. Student s1=new Student(zhangsan,18)。以下代碼可以證明: [java] view plaincopy 1. //Professor 沒有實現(xiàn) Cloneable 接口,默認(rèn)使用 類的 clone()方法 2. class Professor{ 3. String name。 15. Student(String name,int age,Professor p){ 16. =name。 30. } 31. } 32. public static void main(String[] args){ 33. Professor p=new Professor(wangwu,50)。 5. Professor(String name,int age){ 6. =name。 22. Professor p。 37. return o。應(yīng)當(dāng)指出的是, 寫在流里的是對象的一個拷貝,而原對象仍然存在于 JVM 里面,因此在 Java 語言里深復(fù)制一個對象,常??梢韵仁箤ο髮崿F(xiàn) Serializable 接口,然后把對象(實際上只是對象的一個拷貝)寫到一個流里,再從流里讀出來便可以重建對象。上例代碼改進(jìn)如下。 24. Student(String name,int age,Professor p){ 25. =name。 37. return(())。 Builder 模式是一步一步創(chuàng)建一個復(fù)雜的對象,它允許用戶可以只通過指 定復(fù)雜對象的類型和內(nèi)容就可以構(gòu)建它們,用戶不需要了解所構(gòu)建對象的內(nèi)部具體構(gòu)建細(xì) 節(jié), Builder 建造設(shè)計模式的目的是為了將構(gòu)造復(fù)雜對象的過程和它的部件解耦。 9. ()。 22. public void encrypt()。 38. } 39. public void encrypt(){ 40. (“Java Builder is encrypting”)。 19. public void pile()。 4. public Director(Builder builder){ 5. = builder。 45. //學(xué)生 1 的教授不改變 46. (name=++,+age=+)。// object of stud 34. / /從流里讀出來 35. ByteArrayInputStream bi=new ByteArrayInputStream(())。 22. int age。 9. return(())。 46. //學(xué)生 1 的教授不改變 47. (name=++,+age=+)。 32. }catch(CloneNotSupportedException e){ 33. (())。 17. } 18. } 19. class Student implements Cloneable{ 20. String 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。 26. } 27. //使用 Object 類的 clone()方法 28. =(Professor)()。 13. int age。 26. } 說明: ① 為什么我們在派生類中覆蓋 Object 的 clone()方法時,一定要調(diào)用()呢? 在運(yùn)行時刻, Object 中的 clone()識別出你要復(fù)制的是哪一個對象,然后為此對象分配空間,并進(jìn)行對象的復(fù)制,將原始對象的內(nèi)容一一復(fù)制到新對象的存儲空間中。 14. }catch(CloneNotSupportedException e){ 15. (())。 為了獲取對象的一份拷貝,我們可以利用 Object 類的 clone()方法,也可以實現(xiàn) Cloneable 接口,覆蓋基類的 clone()方法,在 clone()方法中,調(diào)用()。不過,無論是對象的值類型字段,還是引用類型字段,都會被重新創(chuàng)建并賦值,對于副本的修改,不會影響到源對象本身。 (2).通過克隆方法創(chuàng)建的原型,雖然也是創(chuàng)建新對象,但是將原型實例對象的數(shù)據(jù)復(fù)制到了新的對象中,相當(dāng)于使用被克隆對象的數(shù)據(jù)作為克隆對象的初始數(shù)據(jù)。 24. } 25. public static void main(String[] args){ 26. Shape shape = new Circle()。 Prototype 原型模式允許一個對象再創(chuàng)建另外一個可定制的對象,根本無需知道任何關(guān)于對象創(chuàng)建的細(xì)節(jié)。產(chǎn)品類可以是多種形式,多層繼承或者是單個類都是可以的。 25. } 26. } 27. //寶馬車工廠 28. class BMWCarFactory extends CarFactory{ 29. public ICar createCar(){ 30. return new BMWCar()。 77. } 78. } 抽象工廠指定了產(chǎn)品組合形式,具體的工廠產(chǎn)生具體的產(chǎn)品,抽象工廠適用于多個產(chǎn)品相互組合的情況。 50. } 51. //IOS 皮膚工廠 52. class IOSSkinFactory implements SkinFactory{ 53. public Style getStyle(){ 54. return new IOSStyle()。 12. } 13. } 14. //軟件 Style 15. interface Style(){ 16. public void showStyle()。 15. } 16. } 17. //圖形工廠 18. class ShapeFactory{ 19. public static Shape createShape(String name) throws InstantiationException, 20. IllegalAccessException, 21. ClassNotFoundException 22. { 23. //使用 java 的反射機(jī)制來產(chǎn)生對象實例 24. return (Shape)(name).newInstance()。 40. (new StrategyTwo(testText1))。 19. } 20. } 21. //替換算法 2:將文本中 n替換為 rn 22. class StrategyTwo extends TextStrategy { 23. public StrategyTwo(String text) { 24. super(text)。 (4).可以為容器或其子容器實現(xiàn)不同的迭代方法或多個迭代方法。 19. } 20. public boolean hasNext() { 21. if (position = ()) { 22. return false。 11. } 12. //java 集合框架的根接口,該接口繼承了容器迭代化接口,因此 java 中的集合都可以被迭代 13. public interface CollectionE extends IterableE 自定義迭代器,以 ArrayList 為自定義迭代容器的底層數(shù)據(jù)結(jié)構(gòu),實現(xiàn)自定義迭代器的代碼如下: [java] view plaincopy 1. public class MyIterator implements Iterable { 2. //存放數(shù)據(jù)的集合 3. private ArrayList list。 迭代器模式由以下角色組成: 1) 迭代器角色( Iterator):迭代器角色負(fù)責(zé)定義訪問和遍歷元素的接口。 71. (sp)。 56. //…… 57. ()。 29. } 30. } 31. //服務(wù)提供者 32. class ServiceProvider{ 33. private State state。 4. void operation2()。 17. public void greet(){ 18. ()。 13. } 14. public static void main(String[] args){ 15. Creature creature = new Creature()。自定義 Handler需要實現(xiàn) invoke 方法,該方法可以使用 Java 反射調(diào)用實現(xiàn)類的實現(xiàn)的方法,同時當(dāng)然可以實現(xiàn)其他功能,例如在調(diào)用實現(xiàn)類方法前后加入 Log,實現(xiàn)安全認(rèn)證等。 36. ProxyHandler handler = new ProxyHandler(foo)。 14. } 15. public void h(int i, String s) { 16. (“(), i=” + i + “, s=” + s)。 41. ()。 12. } 13. public void f(){ 14. ()。 若單類類繼承了實現(xiàn)克隆方法的類,則在單類類中必 須覆蓋父類的克隆方法,顯式拋出異常 CloneNotSupportedException。 上面兩種 Singleton 單類設(shè)計模式的實現(xiàn)方式都隱藏有如下的問題: (1)
點擊復(fù)制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1