<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)航:
     
    主站蜘蛛池模板: 亚洲最大成人网色香蕉| 亚洲av鲁丝一区二区三区| 亚洲午夜精品国产电影在线观看| 日韩人妻无码精品久久免费一| 国产亚洲精品无码成人| 国产麻豆一精品一AV一免费| 亚洲国产精品无码中文字| 国产精品免费观看调教网| 亚洲视频免费观看| 一色屋成人免费精品网站| 久久精品国产亚洲AV忘忧草18| 丁香花免费完整高清观看| 亚洲老熟女五十路老熟女bbw| 两个人的视频高清在线观看免费 | 日韩精品免费一线在线观看| 成人亚洲综合天堂| 91视频免费网站| 亚洲国产美女精品久久| 成人毛片18女人毛片免费96| 国产亚洲精品欧洲在线观看| 亚洲毛片网址在线观看中文字幕| a毛片免费在线观看| 亚洲国产日韩女人aaaaaa毛片在线| 99精品国产免费久久久久久下载| 苍井空亚洲精品AA片在线播放| 亚洲美女在线国产| 无码国产精品一区二区免费式芒果| 亚洲国产成a人v在线| 亚洲AⅤ无码一区二区三区在线 | 亚洲欧洲日本国产| 国产精品免费视频一区| 青青操在线免费观看| 亚洲一卡二卡三卡| 亚洲伊人久久综合中文成人网| 亚洲免费视频网站| 亚洲av无码兔费综合| 亚洲国产精品高清久久久| 一二三四在线观看免费高清中文在线观看| 久久亚洲精品11p| 亚洲第一福利网站| 午夜国产羞羞视频免费网站|