天天看點

大話設計模式之設計原則

        原則指的是說話、行事所依據的準則。 “理論與實踐的統一,是馬克思主義的一個最基本的原則。原則處處不在,那我們程式設計的世界中又有着怎樣的原則呢?在我們的大話設計模式中,介紹了六種原則,下面我們對這些原則進行一一講解。

        一、單一職責原則

        一枚小小的環形戒指,一如永世不變的約定。戒指的愛情含義,令世間所有女性為之向往。香港戴瑞珠寶集團旗下品牌Darry Ring更将戒指的含義浪漫诠釋,以一生僅有一枚的奇特規定,讓每一枚戒指都有隻有一個專屬的承諾,唯一的一枚,是為此生摯愛保留。而這一切隻源于Darry Ring對真愛的追求傳播,見證更多真愛故事。香港戴瑞珠寶集團旗下極富盛名的求婚戒指品牌Darry Ring,以全球首創獨樹一幟綁定身份證定制鑽戒形式,提出了“一生?唯一?真愛”的品牌理念。在此有最浪漫的購鑽規定,每位男士憑借身份證僅可定制唯一一枚Darry

Ring,贈予此生唯一摯愛。

        Darry Ring品牌的創立初衷,旨在見證真愛,傳播真愛理念。在浮華社會裡,依然存留一方對純淨美好愛情的期待,而鑽戒象征的堅貞與永恒便成為了最完美的信物。一生僅有一枚Darry Ring,因一生隻愛一個人。真愛,是回歸初心尋找到的一份難能可貴的美好。Darry Ring的可貴,在于傳播了真愛唯一的理念,讓擁有一枚Darry Ring的女人享有一份專屬的幸福;并以此生唯一守護的安全感,庇護着每對戀人至真至美的愛情。一份真愛協定,承載的意義絕對不亞于一份結婚證書。簽署下的是一生唯一的約定,名字将永遠印記在協定上,不能修改、删除,需要一生信守承諾,呵護至極。

        一如我們設計模式中的單一職責原則, 就一個類而言,應該僅有一個引起它變化的原因。如果一個類承擔的職責過多,就等于把這些職責耦合在一起,一個職責的變化可能會削弱或者抑制這個類完成其他職責的能力。這種耦合會導緻脆弱的設計,當變化發生時,設計會遭受到意想不到破壞。軟體真正要做的許多内容,就是發現職責并把那些職責互相分離。如果你能夠想到多于一個的動機去改變一個類,那麼這個類就具有多于一個的職責,就應該考慮類的職責分離。和我們的學習思想不謀而合,專注,高效,是以成功......

      二、開放-封閉原則

        曆史走過了整整數百年。香港和澳門的回歸有着劃時代的意義,充分顯示了按照“一個國家、兩種制度”實作中國統一大業指導思想具有強大的生命力。是以,“一國兩制”方針将能推進祖國的和平統一事業,實作祖國的完全統一和民族的全面振興。

        恰似我們的軟體,學過軟工的小朋友都知道,軟體需求總是變化的,世界上沒有一個軟體的是不變的,是以對軟體設計人員來說,必須在不需要對原有系統進行修改的情況下,實作靈活的系統擴充。所謂開放封閉原則就是軟體實體應該對擴充開發,而對修改封閉。開放封閉原則是所有面向對象原則的核心。軟體設計本身所追求的目标就是封裝變化,降低耦合,而開放封閉原則正是對這一目标的最直接展現。開放封閉原則主要展現在兩個方面:對擴充開放,意味着有新的需求或變化時,可以對現有代碼進行擴充,以适應新的情況。對修改封閉,意味着類一旦設計完成,就可以獨立其工作,而不要對類盡任何修改。

       學習是為了更好的生活,願看到這篇文章的小朋友對痛苦關閉,對快樂開放......

       三、裡氏代換原則

       1988年,由麻省理工學院一位姓裡的女士(Liskov)提出來,舉個簡單的例子,“貓”是抽象的貓,而黑貓和白貓是貓的具體子類,一隻黑貓則是“黑貓”類的執行個體,一隻白貓則是“白貓”類的執行個體,如果一個方法适用于貓,那麼必然适用于白貓或者是黑貓。如果有一個方法,捉老鼠,這就是曆史代換原則,如果對每個類型T1的對象01,都有類型為T2的對象02,使得T1定義的所有程式P在所有對象01都代換成02時,程式P的行為沒有變化,那麼T2為T1的子類型。

       在項目中,采用裡氏替換原則時,盡量避免子類的“個性”,一旦子類有“個性”,這個子類和父類之間的關系就很難調和了,把子類當做父類使用,子類的“個性”被抹殺——委屈了點;把子類單獨作為一個業務來使用,則會讓代碼間的耦合關系變得撲朔迷離——缺乏類替換的标準。

       四、依賴倒轉原則

       所謂依賴倒置原則(Dependence Inversion Principle)就是要依賴于抽象,不要依賴于具體。簡單的說就是要求對抽象進行程式設計,不要對實作進行程式設計,這樣就降低了客戶與實作子產品間的耦合。

       舉個簡單的例子,我們現在使用的電腦有各式的品牌,聯想、神舟、戴爾等等,電腦需要用到滑鼠,鍵盤;假設滑鼠、鍵盤是針對某一個品牌的機器實作去做的話,那麼我們将會遇到什麼問題呢?那麼我們市面上的鍵盤和滑鼠就都是各式各樣的,有一天滑鼠,或鍵盤壞了,我們要怎麼去買呢?難道記住這個電腦是什麼品牌,什麼型号,還有什麼類型的去買麼?這樣會瘋掉的。現在我們的電腦基本上都是使用USB接口的了,無論是鍵盤也好,滑鼠也好,我們隻要買USB接口的就可以使用了,同時,使用USB接口還可以有其他的擴充,隻要實作了,這個接口,實作怎麼樣都沒關系,例如,實作了USB接口的小台燈,隻要接上USB線就可以照明了;又如實作了USB

接口的充電器,接到我們的電腦上就可以充電了。 

       高層子產品不應該依賴低層子產品,兩者都應該依賴其抽象又如何了解呢?這個問題也可以這麼問:為什麼要叫倒轉?呢?在面向過程的開發中,為了使用常用的代碼可以複用,一般都會把這些常用的代碼寫成許許多多函數的程式庫,這樣我們做新項目的時候,就去調用這些函數就可以了。

       五、迪米特法則

       迪米特法則(Law of Demeter)又叫做最少知識原則(Least Knowledge Principle 簡寫LKP),就是說一個對象應當對其他對象有盡可能少的了解,不和陌生人說話。《老子》雲:"小國寡民……鄰國相望,雞犬之聲相聞,民至老死,不相往來。"将被統治的對象隔離開來,使它們沒有直接的通信,可以達到分化瓦解,繼而分而治之的效果。迪米特法則與老子的"小國寡民"的統治之術不謀而合。

       六、合成/聚合複用原則

       聚合表示一種弱的“擁有”關系,展現的是A對象可以包含B對象,但B對象不是A對象的一部分;合成則是一種強的“擁有”關系,展現了嚴格的部分和整體的關系,部分和整體的生命周期一樣。

       優先使用對象的合成/聚合将有助于保持每個類的封裝,并被集中在單個任務上。這樣類和類繼承層次會保持較小的規模,并且不太可能增長到不可控制的龐然大物。

       後記

       在我們的設計模式中,正是因為有了這些原則的存在,以及她們在代碼中的靈活應用,讓我們的軟體更加富有創造力和生命力,單一職責原則--一生隻愛你一個,開放--封閉原則-祖國統一,有你有我,你永遠是我的不可分割,裡氏代換原則--無論黑貓白貓抓到老鼠的貓都是好貓;依賴倒轉原則--任你戴爾或是聯想,我們有着相同的接口實作外部連接配接,迪米特法則--無為而治,小國寡民不謀而合,合成聚合--部分和整體需要好好把握....

繼續閱讀