<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    設(shè)計(jì)原則1
    找出應(yīng)用中可能需要變化之處,把它們獨(dú)立出來(lái),不要和那些不需要變化的代碼混在一起。

    不管當(dāng)初軟件設(shè)計(jì)得多好,一段時(shí)間后,總是需要成長(zhǎng)與改變,否則軟件會(huì)死亡。

    設(shè)計(jì)原則2
    針對(duì)接口編程,而不是針對(duì)實(shí)現(xiàn)編程。

    其真正意思是針對(duì)超類(lèi)編程,不一定非要用接口,關(guān)鍵在多態(tài)。這樣程序在執(zhí)行時(shí)會(huì)根據(jù)實(shí)際狀況執(zhí)行到真正的行為,不會(huì)被綁死在超類(lèi)型的的行為上。

    更明確地說(shuō),是變量的聲明類(lèi)型應(yīng)該是超類(lèi)型,通常是一個(gè)抽象類(lèi)或者是一個(gè)接口,如此,只要是具體實(shí)現(xiàn)此超類(lèi)型的類(lèi)所產(chǎn)生的對(duì)象,都可以指定給這個(gè)變量。

    設(shè)計(jì)原則3
    多用組合,少用繼承。

    組合建立的系統(tǒng)具有更大的彈性,不僅可以將算法封裝成類(lèi),更可以在運(yùn)行時(shí)動(dòng)態(tài)地改變行為。

    1、策略模式(Strategy)
    定義了算法族,分別封裝起來(lái),讓它們之間可以相互替換,此模式讓算法的變化獨(dú)立于使用算法的客戶(hù)。

    使用模式談?wù)撥浖到y(tǒng),可以讓你保持在設(shè)計(jì)層次,不會(huì)被壓低到對(duì)象與類(lèi)這種瑣碎的事情上面。

    建立可維護(hù)的OO系統(tǒng),要訣就在于隨時(shí)想到系統(tǒng)以后可能需要變化以及如何應(yīng)付變化的原則。

    2、觀察者模式(Observer)
    定義了對(duì)象之間的一對(duì)多依賴(lài),這樣一來(lái),當(dāng)一個(gè)對(duì)象改變狀態(tài)時(shí),它的所有依賴(lài)者都會(huì)收到通知并自動(dòng)更新。有push和pull兩種模式。

    典型:Swing中的Listener。

    設(shè)計(jì)原則4
    為了交互對(duì)象之間的松耦合設(shè)計(jì)而努力。

    關(guān)于java內(nèi)置的觀察者模式支持。
    Observable是一個(gè)類(lèi)而不是接口,java不支持多繼承,限制了Observable的復(fù)用潛力,無(wú)法建立自己的實(shí)現(xiàn)。
    它將關(guān)鍵的方法protected起來(lái),這樣除非繼承自O(shè)bservable,否則無(wú)法創(chuàng)建Observable實(shí)例并組合到自己的對(duì)象中來(lái)。
    所以除非Observable符合你的要求,否則自己實(shí)現(xiàn)一套觀察者模式。
    setChanged()方法把changed標(biāo)志設(shè)為true,notifyObservers()只會(huì)在changed標(biāo)為true時(shí)才會(huì)通知觀察者。

    不要依賴(lài)于觀察者被通知的順序。

    設(shè)計(jì)原則5-開(kāi)放關(guān)閉原則
    類(lèi)應(yīng)該對(duì)擴(kuò)展開(kāi)放,對(duì)修改關(guān)閉。
    ---代碼應(yīng)該如同晚霞中的蓮花一樣地關(guān)閉(免于改變),如同晨曦中的蓮花一樣地開(kāi)放(能夠擴(kuò)展)。

    讓設(shè)計(jì)的每個(gè)部分都遵循開(kāi)放-關(guān)閉原則,通常是辦不到的。即使做到了也會(huì)耗費(fèi)大量的時(shí)間和精力,遵循開(kāi)放關(guān)閉原則通常會(huì)引入新的抽象層次,增加代碼的復(fù)雜度。你需要把注意力集中在設(shè)計(jì)中最有可能改變的地方,然后應(yīng)用開(kāi)放-關(guān)閉原則。
    這需要多看例子積累經(jīng)驗(yàn)。


    3.裝飾者模式(Decorator)
    動(dòng)態(tài)地將責(zé)任附加到對(duì)象上。若需要擴(kuò)展功能,裝飾者提供了比繼承更有彈性的替代方案。符合開(kāi)閉原則!

    裝飾者與被裝飾對(duì)象擁有相同的超類(lèi)型。
    可以用一個(gè)或者多個(gè)裝飾者包裝一個(gè)對(duì)象。
    在任何需要被包裝對(duì)象的場(chǎng)合,都可以用裝飾過(guò)它的對(duì)象代替它。
    裝飾者可以在被裝飾者的行為之前/之后,加上自己的行為,以達(dá)到特定的目的。
    對(duì)象可以在任何時(shí)候被裝飾,所以可以在運(yùn)行時(shí)動(dòng)態(tài)地、不限量地用你喜歡的裝飾者來(lái)裝飾對(duì)象。

    典型:java i/o 。FilterInputStream就是一個(gè)裝飾者類(lèi)。

    “缺點(diǎn)”:利用裝飾者模式常常造成設(shè)計(jì)中有大量的小類(lèi),數(shù)量實(shí)在太多了,可能造成使用此API程序員的困擾。但是,當(dāng)了解到裝飾者的工作原理,以后使用別人大量裝飾的API時(shí),就可以很容易地辨別出它們的裝飾者類(lèi)是如何組織的,以方便包裝方式取得想要的行為。

    初次接觸java i/o類(lèi)庫(kù),往往無(wú)法輕易理解它。但是一旦認(rèn)識(shí)到這些類(lèi)都是用來(lái)包裝InputStream的,一切都變得簡(jiǎn)單多了。


    4.工廠模式(Simple Factory)

    把new操作符替換成工廠對(duì)象的創(chuàng)建方法,不再具體實(shí)例化。

    把產(chǎn)生對(duì)象的代碼分離出來(lái),這樣其余的代碼沒(méi)有和具體的對(duì)象打交道,就可以對(duì)修改關(guān)閉了。而獨(dú)立出來(lái)生產(chǎn)對(duì)象的工廠可以為很多的類(lèi)服務(wù)!不僅僅是剛才那個(gè)。

    工廠方法用來(lái)處理對(duì)象的創(chuàng)建,并將這樣的行為封裝在子類(lèi)中。這樣,客戶(hù)程序中關(guān)于超類(lèi)的代碼就和子類(lèi)對(duì)象創(chuàng)建代碼解耦了。



    只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲精品国产电影午夜| 久久99国产亚洲精品观看| 亚洲欧美成人综合久久久| 台湾一级毛片永久免费 | 黄色视频在线免费观看| 免费人成年激情视频在线观看| 亚洲精品欧美综合四区| 国产美女做a免费视频软件| 春暖花开亚洲性无区一区二区| 国产伦精品一区二区三区免费迷 | 国产精品高清视亚洲一区二区| 大学生一级毛片免费看| 亚洲中文字幕乱码熟女在线| 在线免费观看韩国a视频| 国产精品亚洲专一区二区三区| 亚洲性日韩精品一区二区三区| 99在线视频免费观看| 亚洲自偷自偷精品| 免费观看成人毛片a片2008| 久久综合亚洲色hezyo| 青青草原亚洲视频| 在线免费中文字幕| 亚洲国产精品ⅴa在线观看| 亚洲一区二区三区在线视频| 久久免费视频精品| 亚洲砖码砖专无区2023| 亚洲高清免费视频| 8090在线观看免费观看| 国产成人亚洲毛片| 亚洲国产精彩中文乱码AV| 久久国内免费视频| 一级毛片免费观看不收费| 亚洲神级电影国语版| 免费一级毛片一级毛片aa| 日韩精品免费视频| 亚洲国产精品成人午夜在线观看 | 91福利视频免费观看| 国产精品亚洲天堂| 亚洲一区二区中文| 亚洲成a人在线看天堂无码| 久久永久免费人妻精品|