日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

計算機是為了讓人們變輕松而承擔現實世界中一部分工作的機器,但現實世界與軟件之間存在著很大的溝壑,為了填補這個溝壑,我們需要進行3個階段的工作,即「業務分析」、「需求定義」、「設計」,而使用UML的建模就是順利推進這些工作的技術——這便是使用設計模式的目的。

在談如何使用設計模式之前,人郵君先帶大家來弄清楚,什么是面向對象。

什么是面向對象

簡單說在程序中一切都是對象。對象即為人對各種具體物體抽象后的一個概念,人們每天都要接觸各種各樣的對象,如手機就是一個對象,汽車是一個對象,汽車輪胎也是一個對象。

面向對象是一種自上而下的設計,先設計組件再完成拼裝。比如,我們呀先造輪胎,造發動機這些汽車零件,最后再拼裝成汽車。這就是面向對象編程。

面向對象的設計離不開設計模式,使用設計模式可以重構整體架構,提高代碼復用性,較少冗余。

設計模式三大特性、六大原則、23種模式

聽起來很高大上,實際上,在我們生活中和面向對象編程中,你肯定不知不覺的已經使用過很多設計模式。比如某村大喇叭廣播了,誰誰家狗丟了,全體村民監聽這次廣播,會對自己感興趣的消息做出對應的反應,如果不感興趣直接忽略。這就是我們說的監聽者模式。

在使用設計模式時,可以通過了解三大特性、六大原則與23種模式,來幫助大家找到正確使用設計模式的根本邏輯。

如何避免過度設計,正確地使用設計模式?

 

一、三大特性

封裝:把數據和函數封裝到一個類里,體現類內和類外。

繼承:由于有了封裝,需要通過繼承在類之間復用代碼。

多態:Python本身是一門多態語言,因此不需去處理多態的問題。JAVA中則會區分虛類和普通類。

因此這三個特性是一個遞進的關系。

二、六大原則

  • 開閉原則(Open Close Principle)

開閉原則就是說對擴展開放,對修改關閉。在程序需要進行拓展的時候,不能去修改原有的代碼,實現一個熱插拔的效果。所以一句話概括就是:為了使程序的擴展性好,易于維護和升級。想要達到這樣的效果,我們需要使用接口和抽象類,這在后面的幾個原則里,也有提到,比如里氏代換原則,依賴倒轉原則等。

  • 里氏代換原則(Liskov Substitution Principle)

這是面向對象設計的基本原則之一。 里氏代換原則中談到,任何基類可以出現的地方,子類一定可以出現。LSP是繼承復用的基石,只有當衍生類可以替換掉基類,軟件單位的功能不受到影響時,基類才能真正被復用,而衍生類也能夠在基類的基礎上增加新的行為。這條原則可以理解為,對“開-閉”原則的補充,實現“開-閉”原則的關鍵步驟是抽象化,而基類與子類的繼承關系就是抽象化的具體實現。

  • 依賴倒轉原則(Dependence Inversion Principle)

這個是開閉原則的基礎,具體內容:真對接口編程,依賴于抽象而不依賴于具體。

  • 接口隔離原則(Interface Segregation Principle)

這個原則的意思是:使用多個隔離的接口,比使用單個接口要好。這還是一個降低類之間的耦合度的意思,從這兒我們可以看出,其實設計模式就是一個軟件的設計思想,從大型軟件架構出發,為了升級和維護方便,記住:降低依賴,降低耦合。

  • 迪米特法則(最少知道原則)(Demeter Principle)

為什么叫最少知道原則,就是說:一個實體應當盡量少的與其他實體之間發生相互作用,使得系統功能模塊相對獨立。

  • 合成復用原則(Composite Reuse Principle)

原則是盡量使用合成/聚合的方式,而不是使用繼承。

三、23種設計模式

1.策略模式-Strategy 它定義了算法家族,分別封裝起來,讓它們之間可以互相替換,此模式讓算法的變化,不會影響到使用算法的客戶。

2.裝飾模式-Decorator 動態的給一個對象添加有一些額外的職責,就增加功能來說,裝飾模式比生成子類更為靈活。

3.代理模式-Proxy 為其他對象提供一種代理以控制對這個對象的訪問。

4.工廠方法模式-Factory method 定義一個擁有創建對象的接口,讓子類決定實例化哪一個類,工廠方法使一個類的實例化延遲到其子類。

5.原型模式-Prototype 用原型實例指定創建對象的種類,并且通過拷貝這些原型創建新的對象。

6.模板方式模式-Template method 定義一個操作中的算法的骨架,而將一些步驟延遲到子類中,模板方法使得子類可以不改變一個算法的結構即可重定義該算法的某些特定步驟。

7.外觀模式-Facade 為子系統中的一組接口提供一個一致的界面,此模式定義了一個高層接口,這個接口使得這一子系統更加容易使用。

8.建造者模式-Builder 將一個復雜對象的構建與它的表示分離,使得同樣的構建過程可以創建不同的表示。

9.觀察者模式-Observer 定義了一種一對多的依賴關系,讓多個觀察者對象同時監聽某一個主題對象。這個主題對象在狀態發生變化時,會通知所有觀察者對象,使它們能夠自動更新自己。

10.抽象工廠模式-Abstract Factory 提供了一個創建一些列相關或相互依賴對象的接口,而無需指定它們具體的類。

11.狀態模式-State 當一個對象的內在狀態改變時允許改變其行為,這個對象看起來像是改變了其類。

12.適配器模式-Adapter 將一個類的接口轉換成客戶希望的另外一個接口,adapter模式使得原本由于接口不兼容而不能一起工作的那些類可以一起工作。

13.備忘錄模式-Memento 在不破壞封裝性的前提下,捕獲一個對象的內部狀態,并在該對象之外保存這個狀態,這樣以后就可將該對象恢復到原先保存的狀態。

14.組合模式-Composite 將對象組合成樹形結構以表示“部分--整體”的層次結構,組合模式使得用戶對單個對象和組合對象的使用具有一致性。

15.迭代器模式-Iterator 提供一種方法順序訪問一個聚合對象中的各個元素,而又不暴露該對象的內部表示。

16.單例模式-Singleton 保證一個類僅有一個實例,使它們都可以獨立地變化。

17.橋接模式-Bridge 將抽象部分與它的實現部分分離,使它們都可以獨立地變化。

18.命令模式-Command 將一個請求封裝為一個對象,從而使你可用不同的請求對客戶進行參數化,對請求排隊或記錄請求日志,以及支持可撤銷的操作。

19.職責鏈模式-Chain of Responsibility 使多個對象都有機會處理請求,從而避免請求的發送者和接受者之間的耦合關系,將這個對象連成一條鏈傳遞該請求,直到有一個對象處理它為止。

20.中介者模式-Mediator 用一個中介對象來封裝一系列的對象交互,中介者使各個對象不需要顯式地相互引用,從而使其耦合松散,而且可以獨立地改變它們之間的交互。

21.享元模式-Flyweight 使用共享技術有效地支持大量細粒度的對象。

22.解釋器模式-Interpreter 給定一個語言,定義它的文法的一種表示,并定義一個解釋器,這個解釋器使用該表示中解釋語言匯中的句子。

23.訪問者模式-Visitor 表示一個作用于某對象結構中的各元素的操作,它使你可以在不改變各元素的類的前提下定義作用于這些元素的新操作。

除基本的原則外,在《面向對象是怎樣工作的》這本書里,還對設計模式與使用進行了較為詳細的介紹。

如何避免過度設計,正確地使用設計模式?

 

比如在第九章中,根據應用程序的不同,建模內容也不同。例如書中提到的應用“圖書館系統的概念模型”來輕松設計關系型數據庫的模式。

如何避免過度設計,正確地使用設計模式?

 

而在第十章中,通過設計的三大目標——去除重復、提高構件的獨立性、避免依賴關系發生循環,介紹了面向對象設計的“感覺”是擬人化和職責分配。作者提到,在設計階段,我們還是會考慮將作為邏輯集合的軟件擬人化,參照現實世界中的人和組織,進行職責分配,這便是面向對象設計時的“感覺”。依據此,大家可以根據自身經驗不斷摸索,以更好的進行提升。

分享到:
標簽:模式 設計
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定