軟考學習到了設計模式部分了。這次主要是學習headfirst,跟剛開始學習大話一樣,總有種豁然開朗的感覺。
記得大話那會,總感覺作者太厲害了,講解每個模式的時候既能從生活中的例項說起,又能給我們講明設計模式,從生活入手,當然我們記得也就深刻了,就如說**模式,具體可能不清楚,但是想起那個啥啥啥代人送禮物。整個過程就會出現,當然模式不想起也就起起來了。這個是大話階段的感覺。
那麼headfirst呢,如果說大話那會學習的「是什麼」,那麼現在學習的是「為什麼」,第一遍的學習只是個認識的過程,再次或者是再再次的學才是真正的學習,這也就是為什麼「學而時習之,不亦說乎」的道理吧。
我們都記得關聯關係中組合和聚合不一樣,乙個關係強,乙個關係弱,組合不可分聚合可分這些我們很早就記住了,在圖中也可以區別它們的不同,但是在**中呢?下面是我的理解:
從**說不同
說明:乙個小組中有好多個人,乙個人有兩隻手。
解析:小組(group)和人(person)是聚合關係,人和手(hands)是組合關係。
聚合關係:
小組和人的關係是聚合關係,聚合關係較組合弱。
class group
}
組合關係:
人和手的關係是組合關係,組合關係較強。
class people
}
解析:無論是組合關係還是聚合關係,在**中都增加了其對應的成員變數。如group中people型別的people,people中hands型別的hands都成了成員變數了。
不同的是,組合關係中hands是在people建構函式中例項化的,hands和people是同生同滅的,group中的建構函式沒有例項化people,而是使用了乙個引用。也就是為什麼我們說組合關係中的部分不能離開整體,聚合關係中部分離開了整體還可以單獨存在。
其他幾種關係都有對應的**,這裡就不一一說明了,圖跟**對應關係很重要。一定不要忽視。只有弄清楚了這個,在學習設計模式的時候,才能照圖寫**。
下面再說說看圖。給出我們乙個圖,我們一定能看出是哪個模式嗎?在設計模式類圖不一樣的前提下是可以認出來的。但是設計模式中卻存在兩個類圖相同的,知道是哪兩個嗎??
如下:
圖一:
圖二:
圖一和圖二中的兩個設計模式,框架結構是一樣的。如果沒有圖中類名說明不能區別他們。可以想到
既然類圖都一樣了,難不成模式的**也一樣嗎。
既然是兩種模式,那麼肯定有不同,這可上面說的一種圖對應一**實現是不矛盾的。相同的是框架結構,不同的是模式的設計思想和**的具體實現。
下面就比較一下這兩個模式吧。
策略模式和狀態模式的比較:
從圖中很明顯的可以看出他們的相同點,類圖一樣,那麼用圖對應**的框架也是一樣的。
不同的是,策略模式封裝的演算法,最後只有乙個演算法被使用,狀態模式封裝的是變化,變化通過不同的狀態改變。
策略模式著重在幾種演算法的可替換性,演算法的替換是在context中呼叫的,而狀態模式,狀態的改變則是在子狀態中定義狀態改變的。
設計模式中,除了策略模式和狀態模式有區別聯絡外,策略模式還可以和模板方法模式。
其實,我們要學的還有很多,努力學吧。
軟考 設計模式 模板方法
模板方法的主要思想就是把所有相同的功能都寫在父類裡,需要有變化的方法在父類中寫成虛方法,在子類中重寫虛方法。所以模板方法提供了乙個很好的 復用平台。abstractclass是抽象類,其實也就是一抽象模板,定義並實現了乙個模板方法,這個模板方法是乙個具體方法,他給出了乙個頂級邏輯的骨架,而路基的組成...
軟考又見軟考
我這地兒 報名截止時間都快到了,3月4日,我才知道開始報名了。大三了,課程少了些。一直想考這個證來著,無奈時間太緊要不就是專業課還沒學。現在已經定下要考本專業研了,方向嘛 唉也說不准,大家都知道這個證是其次的搞技術的話還是能力問題,我的想法考這個是為了梳理專業知識,以備研究生專業課的考試 以後很可能...
軟考 軟考之路
面對軟考你是怎樣的心境呢?從最開始我拿到軟考書開始,感覺好厚呀,還有三門自考,這是要把自己置於何地了呢?但是翻開書本,看到那熟悉的知識,很多都是自考中的知識,這個時候是不是該悔恨當初沒有好好學習自考了呢?一 三遍讀書法 一本書從開始讀,到每一遍的不斷閱讀將書本讀薄,將知識理解,每一遍都是不可缺少的一...