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

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

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

    ColorPicTips on Getting StartedColorPic

    隨筆 - 4  文章 - 7  trackbacks - 0
    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    After you've installed the ColorPic you might be wondering how to get started picking colors. Use the tips below to get started selecting colors and use a few advanced features that you might not have know about too.

    常用鏈接

    留言簿(1)

    隨筆檔案

    文章分類

    文章檔案

    相冊

    http://cwj-0122.cnblogs.com/

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    這次這個主題還是關于設計模式的,在早期的一篇已經寫了,一直到現在還沒繼續完成他。而為什么又寫這主題呢?因為,這跟前面的主題確有不同之處,這回主要闡述了設計模式的進化問題。
    到了今天,終于有點時間完成這主題了...
    目錄結構:
    1.基本概念
    2.基礎結構
    3.基于基礎結構的模式演化過程
    其實這樣的層次是很簡單了,在基礎結構誕生之后,基于委托的模式已經算是很明了的了。然后,大概介紹幾個基于委托的模式的演化過程
    1.基本概念
    這里列出了幾個相關概念。
    委托
    臨時委托
    DIP原則
    客戶
    中介者(我叫它為管理器和調度器,當然,在不同模式中,取名有所差別)
    目標對象
    2.基本結構
    編程中,當你需要某種服務,你當然會去調用具有該服務的目標對象(有可能是更高層次的組件),很顯然,結果,就是這樣一個的結構。client調用ClassA來實現某種服務。

    比如,為了處理字符串,你會new String,然后進行一些處理。甚至,你的代碼里到處都充砌著String的足跡,這樣確實能很好的解決問題。這樣的結構背后的理由呢?首先,我想說的是,這樣的結構違反了DIP原則,細節應該依賴于抽象,而不是依賴于另一個細節。這樣的依賴關系會使代碼缺乏彈性,很難復用,遷一發動全身。應該改進的是,把ClassA的抽象提取出來,然后讓client去依賴于IClassA,變成如下圖: 
     

    但是,事實上,我們沒有這么做。這是因為String這樣的類實例具有很強的穩定性,這樣的穩定性保證了它不會經常變化,這就是行為的穩定性因素。這樣具有強穩定性的類沒必要復雜化。所以,我們讓接受了client依賴于細節的結果。這樣的細節是單一的。
    然而,需求是變化的,解決方案是不穩定的,在我們的項目中,會有大量不具穩定性的因素存在。在項目中,你會發現存在著多個同性質而實現細節有異的行為類存在。
    比如存在著這樣的三個類ClassA,ClassB, ClassC,
    client在不同地方調用它。結構圖如下: 
     

    我假設client是個main函數,OK,調用的代碼應該是這樣,
    void main(){
            ...
           ClassA a = new ClassA();

    (1)    a.MethodOne();
    (2)    for(int i=0;i<3;i++){
    (3)       a.MethodTwo();
    (4)    }
           .....

           ClassB b = new ClassB();
    (5)    b.MethodOne();
    (6)    for(int i=0;i<3;i++){
    (7)       b.MethodTwo();
    (8)    }

    }
    這樣的代碼,給你的感覺怎么樣,也許還蠻過得去,他確實是跑得起來。但這樣的代碼存在潛在的危險性。應該被歸入糟糕設計的范疇里。首先,客戶面對不具穩定性的因素,根據DIP原則,它沒有提取抽象,違反了DIP原則。其次,client(main)必須負責策略的組織(我把類似(1)(2)(3)(4)的目標對象的這樣一組調用過程稱為策略組織),也就是說,client面對的不是一個完全的黑盒子,他面對的是一些半黑的盒子,同時,他必須知道怎么把這些半黑的盒子組裝起來。例如(5)(6)(7)(8)這些對客戶來說,是一組半黑的盒子。客戶本身的任務太重了,同時,這樣的任務彌漫在客戶的頭和腳之間,及其零亂。很快,又有類似的另一種不具穩定性的因素參與這樣的彌漫活動,最終的客戶將被淹沒在不穩定性因素組成的大海里。如果,剛好是你在負責這樣的客戶編碼,我,很同情你。重構吧,老兄。
    不滿意,好,我們做第一次修改,根據DIP原則,我們提取這三個類的抽象。比如IClass, 然后,大家都實現他。然后,把ClassA a = new ClassA(); 改為IClass a = new ClassA();OK,很好的遵循了DIP原則。然后,我們需要有一個參與者,我稱該類為Context或(Manager,mediator),它的職責很簡單,僅僅負責半黑盒子的組裝。我們沒有給予他過多的職責。SRP的違反同樣讓人覺得可怕。并把IClass作為一個委托對象屬性傳遞給它。結構圖如下: 
     

    這樣,客戶很輕松的從半黑盒子的策略組織中脫離出來,它只管在Context與這三個類之間進行裝配,而裝配的方式,你可以自由選擇任何一種注入方式。例如:
    你給Context裝配一個ClassB。
    Context context = new Context(new ClassB());
    OK,針對于不穩定性因素的解決方案的基礎結構出來了。這也是基于委托的設計模式的基礎。這樣的模型具有潛在的進化與退化問題。
    1.Context是個具體類,具有不穩定性,有著往抽象方向的進化。
    2.A線上是個委托屬性。有著往臨時委托方向的退化。
    3.B線上create過程有從客戶向Context轉移的變化性。
    4.Context的組織權有著向IClass轉移的可能性。
    在下面的繼續中,我們會從基本型中根據這四個進化與退化以及委托的意義,演變出不同的模式。 同時,我會把各個模式自身的進化與退化做個簡介(自身的演化可能演變成別的模式)
    等待繼續.....
    posted @ 2008-08-14 12:54 zhqh 閱讀(1395) | 評論 (5)編輯 收藏
    僅列出標題  

    aaaaaaaaaaaaaaaaaaaaaa

    主站蜘蛛池模板: 国产成人啪精品视频免费网| 国产网站免费观看| 国产亚洲精品岁国产微拍精品| 男男gay做爽爽的视频免费| 日本成人免费在线| 亚洲AV无码一区二区三区网址 | 中文字幕亚洲电影| 伊人久久国产免费观看视频| 亚洲欧洲中文日韩久久AV乱码| 特级aa**毛片免费观看| 亚洲欧洲精品成人久久奇米网| 一级毛片免费不卡| 亚洲精品乱码久久久久66| 久久香蕉国产线看免费| 亚洲日韩乱码中文无码蜜桃臀| 免费A级毛片无码无遮挡内射| 亚洲一区二区三区不卡在线播放| 成人毛片免费观看| 黄色免费网址大全| 亚洲精品少妇30p| 国产精品入口麻豆免费观看| 亚洲精品蜜夜内射| 久久久久亚洲AV成人网人人网站| 免费毛片a线观看| 日韩亚洲产在线观看| 男人的天堂亚洲一区二区三区 | 人成免费在线视频| 亚洲国产精品久久久天堂| 91热成人精品国产免费| 亚洲日韩国产一区二区三区在线| 亚洲高清最新av网站| 99精品热线在线观看免费视频| 亚洲天然素人无码专区| 亚洲综合亚洲综合网成人| 最近中文字幕完整免费视频ww| 亚洲av日韩av永久在线观看| 亚洲日韩精品一区二区三区无码| 99久久99这里只有免费费精品| 青青青视频免费观看| 亚洲视频在线观看网站| 亚洲А∨精品天堂在线|