??
?????
什么是組件,大家都會說是一個可以重用的可擴展的等一大堆特性的類的集合.(暈) 而作為我們這些未出茅廬的學子如何去理解這些特性呢?其實理解設計模式與組件,看懂幾個結構圖并不難,而難的是為什么與怎么用.
以下是我對其的一些理解:
從本質上講,組件的存在意義是以其被調用者的身份出現的.而非調用者.也就是說組件大多用來解決普遍性的問題.比較一般的問題.說白了,就是組件的結構要相對客戶代碼(調用者)穩定.(就好像你去商場買東西,商場必須把東西擺在較固定的位置,而不能今天擺這里明天擺那里,而今天和明天有些貨物是不同的,有時有貨有時沒貨但不能因為沒貨就擺上完全不同種類的貨物在原先的架子。那客戶就難找了)
而所謂的需求變化,就是有些變化會導致組件的變化,但我們又要保持組件的結構相對客戶穩定(相對調用者穩定),但客戶代碼是調用組件的(也就是依賴組件)所以我們就在寫組件時要引入抽象(接口)(也就是封裝變化點)讓客戶代碼(調用者)依賴抽象(接口—就像合同,客戶規定了組件應提供何種服務(調用接口),而不管你是如何提供服務的)。而讓組件的變化不會影響到客戶代碼。而設計模式無非就是引入一個抽象再通過組合或繼承的手段來達到設計合適組件的目的。
但是我們在寫代碼的時候,往往會發現我們到頭來還不是要new一個個具體對象,new一個新的對象不就依賴具體(重新編譯客戶代碼)了嗎?所以呢,那些高手就來了個動態加載,來個配置文件,什么Ioc(控制反轉)等無非就是滿足這方面的需求。也就是讓你不用修改客戶代碼,而通過修改配置文件(就是組件的配置文件)讓客戶根據配置文件來選擇行為。
所以,學東西死記不了,一定要弄明白一個概念的提出是用來解決什么問題的。(就好像我們賺錢是為了什么(我們都清楚),而不能只會賺錢不會花錢)然后再看他是怎么實現的,哪段代碼變,哪段代碼要穩定,從而保證結構穩定。通常是保持結構不變(而軟件重構也就是讓結構更加穩定),卻可以擴展。也就是OCP(對擴展開放,對修改關閉)
所以,面向對象思想與設計模式的目的之就是找變化,哪里有變化,哪里就封而裝之