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

正文內(nèi)容

java程序設(shè)計(jì)模式程序設(shè)計(jì)-展示頁

2024-09-08 17:53本頁面
  

【正文】 ure = new Creature()。 6. }else{ 7. (“Darling!”)。 我們經(jīng)常遇到如下的程序代碼: [java] view plaincopy 1. public class Creature{ 2. private Boolean isFrog = true。 當(dāng)用戶調(diào)用這個(gè)動(dòng)態(tài)生成的實(shí)現(xiàn)類時(shí),實(shí)際上是 調(diào)用了自定義 Handler 的invoke 方法。自定義 Handler需要實(shí)現(xiàn) invoke 方法,該方法可以使用 Java 反射調(diào)用實(shí)現(xiàn)類的實(shí)現(xiàn)的方法,同時(shí)當(dāng)然可以實(shí)現(xiàn)其他功能,例如在調(diào)用實(shí)現(xiàn)類方法前后加入 Log,實(shí)現(xiàn)安全認(rèn)證等。和 結(jié)合,可以加強(qiáng)現(xiàn)有類的方法實(shí)現(xiàn)。 41. (“h”, 2)。 39. (“f”)。 36. ProxyHandler handler = new ProxyHandler(foo)。 30. return null。 28. (, args)。 23. public ProxyHandler (Object obj) { 24. delegate = obj。 14. } 15. public void h(int i, String s) { 16. (“(), i=” + i + “, s=” + s)。 6. } 7. //接口實(shí)現(xiàn)類,即被代理類 8. class FooImpl implements Foo{ 9. public void f(String s){ 10. (“(), s=” + s)。 4. public void g(int i)。 43. } 44. } 從 以后, java 引入動(dòng)態(tài)代理機(jī)制, java 的動(dòng)態(tài)代理只能針對(duì)接口進(jìn)行動(dòng)態(tài)代理,即要實(shí)現(xiàn)動(dòng)態(tài)代理的類必須實(shí)現(xiàn)接口, CGLIB 提供了針對(duì)類的動(dòng)態(tài)代理功能。 41. ()。 33. } 34. } 35. //客戶端程序調(diào)用代理 36. public class ProxyDemo{ 37. public static void main(String[] args){ 38. //客戶端調(diào)用代理程序 39. Proxy p = new Proxy()。 27. } 28. public void g(){ 29. (“()”)。 18. } 19. public void h(){ 20. ()。 12. } 13. public void f(){ 14. ()。 5. } 6. //代理程序 7. class Proxy implement ProxyBase{ 8. private ProxyBase implementation。 3. public void g()。 Proxy 設(shè)計(jì)模式 Proxy 代理設(shè)計(jì)模式是一種控制對(duì)象訪問的設(shè)計(jì)模式,類似于網(wǎng)絡(luò)代理,網(wǎng)絡(luò)代理機(jī)制如下圖: Proxy 代理設(shè)計(jì)模式機(jī)制如下: 客戶端程序通過代理程序來訪問真正的目標(biāo)程序,代理程序?qū)ν怆[藏了目標(biāo)程序。 若單類類繼承了實(shí)現(xiàn)克隆方法的類,則在單類類中必 須覆蓋父類的克隆方法,顯式拋出異常 CloneNotSupportedException。 11. } Singleton 單類模式中只有一個(gè) INSTANCE 枚舉元 素,枚舉可以保證真?zhèn)€程序生命周期中只有一個(gè)實(shí)例對(duì)象存在,同時(shí)還避免了常規(guī) Singleton 單類模式 private 構(gòu)造方法被反射調(diào)用和序列化問題。 7. public Singleton3 getInstance(){ 8. return INSTANCE。 (2).對(duì)象序列化之后再反序列化時(shí)會(huì)生成新的對(duì)象,因此當(dāng) Singleton 單類模式類實(shí)現(xiàn)序列化接口時(shí),必須顯式聲明所有的字段為 tranisent。 上面兩種 Singleton 單類設(shè)計(jì)模式的實(shí)現(xiàn)方式都隱藏有如下的問題: (1).雖然構(gòu)造方式的訪問修飾符為 private,即除了自身以外其他任何類都無法調(diào)用,但是通過反射機(jī)制的 setAccessiable(true)方法可以訪問私有方法和屬性。 12. } 13. return instance。 10. } 11. } 餓漢單類模式即延遲初始化單類方式,例子代碼: [java] view plaincopy 1. public class Singleton2{ 2. //餓漢模式,聲明時(shí)不創(chuàng)建實(shí)例對(duì)象 3. public static Singleton2 instance。 單類模式有兩種實(shí)現(xiàn)方式:飽漢模式和餓漢模式,如下: 飽漢單類模式例子代碼: [java] view plaincopy 1. public class Singleton1{ 2. //飽漢模式,聲明時(shí)就創(chuàng)建實(shí)例對(duì)象 3. public static final Singleton1 instance = new Singleton1()。 Java 設(shè)計(jì)模式 創(chuàng)建型模式 AbstractFactory ( 抽象工廠 ) FactoryMethod ( 工廠方法 ) Singleton ( 單態(tài)模式 ) Builder ( 建造者模式 ) Prototype ( 原型模式 ) 結(jié)構(gòu)型模式 Adapter ( 適配器模式 ) Bridge ( 橋接模 式 ) Composite ( 組合模式 ) Decorator ( 裝 配 模式 ) Facade ( 外觀模式 ) Flyweight ( 享元模式 ) Proxy ( 代理模式 ) 行為型模式 Chain of Responsibility ( 責(zé)任鏈模式 ) Command ( 命令模式 ) Interpreter ( 解釋器模式 ) Iterator ( 迭代器 模 式 ) Mediator ( 中介者模式 ) Memento ( 備忘錄模式 ) Observer ( 觀察者模式 ) State ( 狀 態(tài) 模式 ) Strategy ( 策略模式 ) TemplateMethod ( 模板方法 ) Visitor ( 訪問者模式 ) Toney Chen 的總結(jié) Singleton 設(shè)計(jì)模式 Singleton 單類模式是最簡單的設(shè)計(jì)模式,它的主要作用是保證在程序運(yùn)行生命周期中,使用了單類模式的類只能有一個(gè)實(shí)例對(duì)象存在。單類模式實(shí)現(xiàn)了類似 C語言中全局變量的功能,單類模式常用于注冊(cè) /查找的服務(wù)。 4. //單類模式的構(gòu)造方法必須為 private,以避免通過構(gòu)造方法創(chuàng)建對(duì)象實(shí)例, 5. //并且必須顯示聲明構(gòu)造方法,以防止使用默認(rèn)構(gòu)造方法 6. private Singleton1(){} 7. //單類模式必須對(duì)外提供獲取實(shí)例對(duì)象的方法 8. public static Singleton1 geInstance(){ 9. return instance。 4. //單類模式的構(gòu)造方法必須為 private,以避免通過構(gòu)造方法創(chuàng)建對(duì)象實(shí)例, 5. //并且必須顯示聲明構(gòu)造方法,以防止使用默認(rèn)構(gòu)造方法 6. private Singleton2(){} 7. //單類模式必須對(duì)外提供獲取實(shí)例對(duì)象的方法,延遲初始化的單類模式必須使用synchronized 同步關(guān)鍵字,否則多線程情況下很容易產(chǎn)生 多個(gè)實(shí)例對(duì)象 8. public static synchronized Singleton2 geInstance(){ 9. //延遲初始化,只有當(dāng)?shù)谝淮问褂脮r(shí)才創(chuàng)建對(duì)象實(shí)例 10. if(instance == null){ 11. return new Singleton2()。 14. } 15. } 一般認(rèn)為飽漢模式要比餓漢模式更加安全。因此 Singleton 單類模式必須考慮這種例外情況。 在 之后引入了 Enum枚舉,因此在 之后 Singleton 單類模式又有了第三種實(shí)現(xiàn)方式,也是最好的實(shí)現(xiàn)方式,例子如下: [java] view plaincopy 1. public enum Singleton3{ 2. INSTANCE{ 3. public void doSomething(){ 4. …… 5. } 6. }。 9. } 10. public abstract void doSomething()。 注意: java 中除了構(gòu)造方法可以創(chuàng)建對(duì)象實(shí)例以外,還可以通過克隆方法(clone()是 Object 中的 protected 方法 )來創(chuàng)建對(duì)象, 若單類對(duì)象直接繼承自O(shè)bject 對(duì)象,則如果沒有提供具體 clone 方法實(shí)現(xiàn),則當(dāng)調(diào)用克隆方法創(chuàng)建對(duì)象時(shí),會(huì)拋出運(yùn)行時(shí)的異常 CloneNotSupportedException。 另外,實(shí)現(xiàn)了單類模式的類不能再有派生子類,因?yàn)闃?gòu)造方式是私有的,子類無法調(diào)用父類構(gòu)造方法,因此達(dá)到了 Final 的效果。普通代理設(shè)計(jì)模式例子代碼如下: [java] view plaincopy 1. interface ProxyBase{ 2. public void f()。 4. public void h()。 9. public Proxy(){ 10. //目標(biāo)程序 11. implementation = new ProxyImplementation()。 15. } 16. public void g(){ 17. ()。 21. } 22. } 23. //目標(biāo)程序 24. class ProxyImplementation implements ProxyBase{ 25. public void f(){ 26. (“()”)。 30. } 31. public void h(){ 32. (“()”)。 40. ()。 42. ()。 JDK 動(dòng)態(tài)代理的例子如下: [java] view plaincopy 1. //代理接口 2. interface Foo{ 3. public void f(String s)。 5. public void h(int i, String s)。 11. } 12. public void g(int i) { 13. (“(), i=” + i)。 17. } 18. } 19. //動(dòng)態(tài)代理處理類 20. class ProxyHandler implements InvocationHandler{ 21. //代理實(shí)現(xiàn)類 22. private Object delegate。 25. } 26. public Object invoke(Object proxy, Method method, Object[] args){ 27. (“Before mothod:” + method)。 29. (“After mothod:” + method)。 31. } 32. } 33. public class DynamicProxyDemo{ 34. public static void main(String[] a
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1