資源描述:
《java程序設(shè)計(jì)模式程序設(shè)計(jì)》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、Java設(shè)計(jì)模式1.1創(chuàng)建型模式AbstractFactory(抽象工廠)FactoryMethod(工廠方法)Singleton(單態(tài)模式)Builder(建造者模式)Prototype(原型模式)1.2結(jié)構(gòu)型模式Adapter(適配器模式)Bridge(橋接模式)Composite(組合模式)Decorator(裝配模式)Facade(外觀模式)Flyweight(享元模式)Proxy(代理模式)1.3行為型模式ChainofResponsibility(責(zé)任鏈模式)Command(命令模式)Interpreter
2、(解釋器模式)Iterator(迭代器模式)Mediator(中介者模式)Memento(備忘錄模式)Observer(觀察者模式)State(狀態(tài)模式)Strategy(策略模式)TemplateMethod(模板方法)Visitor(訪問者模式)ToneyChen的總結(jié)Singleton設(shè)計(jì)模式Singleton單類模式是最簡單的設(shè)計(jì)模式,它的主要作用是保證在程序運(yùn)行生命周期中,使用了單類模式的類只能有一個(gè)實(shí)例對象存在。單類模式實(shí)現(xiàn)了類似C語言中全局變量的功能,單類模式常用于注冊/查找的服務(wù)。單類模式有兩種實(shí)現(xiàn)方式
3、:飽漢模式和餓漢模式,如下:飽漢單類模式例子代碼:[java]viewplaincopy1.public?class?Singleton1{??2.????????//飽漢模式,聲明時(shí)就創(chuàng)建實(shí)例對象??3.????public?static?final?Singleton1?instance?=?new?Singleton1();??4.????//單類模式的構(gòu)造方法必須為private,以避免通過構(gòu)造方法創(chuàng)建對象實(shí)例,??5.????????//并且必須顯示聲明構(gòu)造方法,以防止使用默認(rèn)構(gòu)造方法??6.????priv
4、ate?Singleton1(){}??7.????????//單類模式必須對外提供獲取實(shí)例對象的方法??8.????????public?static?Singleton1?geInstance(){??9.???????????return?instance;??10.????????}??11.}??餓漢單類模式即延遲初始化單類方式,例子代碼:[java]viewplaincopy1.public?class?Singleton2{??2.????????//餓漢模式,聲明時(shí)不創(chuàng)建實(shí)例對象??3.????publ
5、ic?static?Singleton2?instance;??4.????//單類模式的構(gòu)造方法必須為private,以避免通過構(gòu)造方法創(chuàng)建對象實(shí)例,??5.????????//并且必須顯示聲明構(gòu)造方法,以防止使用默認(rèn)構(gòu)造方法??6.????private?Singleton2(){}??7.????????//單類模式必須對外提供獲取實(shí)例對象的方法,延遲初始化的單類模式必須使用synchronized同步關(guān)鍵字,否則多線程情況下很容易產(chǎn)生多個(gè)實(shí)例對象??8.????????public?static?synchro
6、nized?Singleton2?geInstance(){??9.???????????//延遲初始化,只有當(dāng)?shù)谝淮问褂脮r(shí)才創(chuàng)建對象實(shí)例??10.???????????if(instance?==?null){??11.???????????????return?new?Singleton2();??12.????????????????}??1.???????????????return?instance;??2.????????}??3.}??一般認(rèn)為飽漢模式要比餓漢模式更加安全。上面兩種Singleton單類設(shè)
7、計(jì)模式的實(shí)現(xiàn)方式都隱藏有如下的問題:(1).雖然構(gòu)造方式的訪問修飾符為private,即除了自身以外其他任何類都無法調(diào)用,但是通過反射機(jī)制的setAccessiable(true)方法可以訪問私有方法和屬性。因此Singleton單類模式必須考慮這種例外情況。(2).對象序列化之后再反序列化時(shí)會生成新的對象,因此當(dāng)Singleton單類模式類實(shí)現(xiàn)序列化接口時(shí),必須顯式聲明所有的字段為tranisent。在JDK1.5之后引入了Enum枚舉,因此在JDK1.5之后Singleton單類模式又有了第三種實(shí)現(xiàn)方式,也是最好的
8、實(shí)現(xiàn)方式,例子如下:[java]viewplaincopy1.public?enum?Singleton3{??2.????INSTANCE{??3.????????public?void?doSomething(){??4.????????????……??5.????????}??6.????};??7.????public?S