摘要:設計模式是一套被反復使用的多數人知曉的經過分類編目的代碼設計經驗的總結。使用設計模式是為了重用代碼讓代碼更容易被他人理解保證代碼可靠性。由此可見,其實設計模式就是從大型軟件架構出發便于升級和維護的軟件設計思想,它強調降低依賴,降低耦合。
點擊進入我的博客 1.1 設計模式概述
設計模式是軟件開發人員在軟件開發過程中面臨的一般問題的解決方案。
設計模式是一套被反復使用的、多數人知曉的、經過分類編目的、代碼設計經驗的總結。使用設計模式是為了重用代碼、讓代碼更容易被他人理解、保證代碼可靠性。
在 1994 年,由Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides四人合著出版了一本名為 Design Patterns - Elements of Reusable Object-Oriented Software(中文譯名:設計模式 - 可復用的面向對象軟件元素) 的書,該書首次提到了軟件開發中設計模式的概念。
面向接口編程的真正意思是面向超類型編程,更明確的說,變量的聲明類型應該是超類型,通常是一個抽象類或者是一個接口。
使用組合建立系統具有很大的彈性,不僅可以將算法族封裝成類,還可以“在運行時動態的改變行為”,只要組合的行為對象符合正確的接口標準。
1.2 UML類圖 1.2.1 概念Unified Modeling Language (UML)又稱統一建模語言或標準建模語言,是始于1997年一個OMG標準,它是一個支持模型化和軟件系統開發的圖形化語言,為軟件開發的所有階段提供模型化和可視化支持,包括由需求分析到規格,到構造和配置。
可視化功能、說明功能、建造功能、建文檔功能
類圖是顯示出類、接口以及它們之間的靜態結構和關系的圖。
類圖最基本的元素是類或接口。
常見的有以下幾種關系:泛化(Generalization)、實現(Realization)、關聯(Association)、聚合(Aggregation)、合成(Composition)、依賴(Dependency)。
在上面的類圖中可以看出,表示類的框分為以下幾層:
類名:如果類名是正體字,表明類是具體的,即是可以實例化的,變量名如果是斜體字,表明類是抽象的。
屬性清單:屬性的左面是+表示它是public,-表示private,#表示是protected。
方法清單:方法的左面是+表示它是public,-表示private,#表示是protected。
性質清單:性質是由一個屬性,一個賦值函數,一個取值函數構成的。
內部成員層:如果一個類有內部成員類,它的類就會有五層,在類的類圖中,除了類名層是不能省略,必須顯示的以外,其它的幾層都可以在UML圖中省略。
接口的類圖和類的類圖幾乎一樣,唯一的區別是接口的名有interface的字樣。
1.2.3 類圖中的關系是一種繼承關系,表示一般與特殊的關系,它指定了子類如何繼承父類的所有特征和行為。
是一種類與接口的關系,表示類是接口所有特征和行為的實現。
關聯是類與類之間的連接,它使一個類知道另一個類的屬性和方法;關聯可以是雙向的,也可以是單向的。雙向的關聯可以有兩個箭頭或者沒有箭頭,單向的關聯有一個箭頭。
聚合關系是關聯關系的一種,是強的關聯關系。
聚合是整體與部分的關系,且部分可以離開整體而多帶帶存在。如車和輪胎是整體和部分的關系,輪胎離開車仍然可以存在。
關聯和聚合在語法上無法區分,必須考察具體的邏輯關系。
合成關系是關聯關系的一種,是比聚合關系還要強的關系,它要求普通的聚合關系中代表整體的對象負責代表部分的對象的生命周期。
合成是整體與部分的關系,但部分不能離開整體而多帶帶存在。
依賴是一種使用的關系,即一個類的實現需要另一個類的協助,所以要盡量不使用雙向的互相依賴。
依賴關系在Java中體現為局部變量、方法的參量,以及對靜態方法的調用。
時序圖又叫做序列圖、活動序列圖,作為交互圖的一種,時序圖按照時間順序從上往下顯示每個使用案例。
時序圖的主要用途是把用例表達的需求,轉化為進一步、更加正式層次的精細表達。
角色:可以是人或者其他系統、子系統。
生命線:代表一個對象存在的時間。
激活條:對象操作執行時期,處于激活的狀態。使用條狀矩形表示,附著于對象生命線上 。
消息:消息用從一個對象的生命線到另一個對象生命線的箭頭表示。箭頭以時間順序在圖中從上到下排列。
同步消息:發送人需要等待消息的響應,實心箭頭表示。
異步消息:發送不需等待消息的響應,線性箭頭表示。
返回消息:虛線的線性箭頭表示。
狀態圖(State Diagram)又稱做狀態轉換圖(State Transition Diagram)。狀態圖的基本想法是定義一個具有有限個內部狀態的機器,因此狀態圖又稱作有限狀態機。對象被外界的時間激發,從而從一個狀態轉換到另一個狀態。
1.3 軟件設計原則 1.3.1 開閉原則(Open Close Principle)一個軟件實體應當對擴展開放,對修改關閉。
在程序需要進行拓展的時候,不能去修改原有的代碼,實現一個熱插拔的效果。
抽象化:抽象化是開閉原則的關鍵。
1.3.2 里氏代換原則(Liskov Substitution Principle)任何基類可以出現的地方,子類一定可以出現。
LSP 是繼承復用的基石,只有當派生類可以替換掉基類,且軟件單位的功能不受到影響時,基類才能真正被復用,而派生類也能夠在基類的基礎上增加新的行為。
里氏代換原則是對開閉原則的補充。實現開閉原則的關鍵步驟就是抽象化,而基類與子類的繼承關系就是抽象化的具體實現,所以里氏代換原則是對實現抽象化的具體步驟的規范。
LSP在設計模式中的體現:策略模式、合成模式、代理模式
1.3.3 依賴倒轉原則(Dependence Inversion Principle)要依賴于抽象,不要依賴于具體
應當使用Java接口和抽象Java類進行變量的聲明、參量的類型聲明、方法的返還類型聲明、以及數據類型的轉換,而非具體Java類。
這個原則是開閉原則的基礎
在設計模式中的體現:工廠方法、模版方法、迭代子模式
1.3.4 接口隔離原則(Interface Segregation Principle)使用多個專門的接口,比使用單個接口要好。
它還有另外一個意思是:降低類之間的耦合度。由此可見,其實設計模式就是從大型軟件架構出發、便于升級和維護的軟件設計思想,它強調降低依賴,降低耦合。
1.3.5 迪米特法則(Demeter Principle)又稱為最少知道原則:一個實體應當盡量少地與其他實體之間發生相互作用,使得系統功能模塊相對獨立。
做法:優先考慮將一個類設置成不變類、盡量降低一個類的訪問權限、謹慎使用Serializable、盡量降低成員的訪問權限
在設計模式中的體現:門面模式、調停者模式
1.3.6 合成復用原則(Composite Reuse Principle)盡量使用合成、聚合的方式,而不是使用繼承。
1.4 設計模式分類 1.4.1 創建型模式這些設計模式提供了一種在創建對象的同時隱藏創建邏輯的方式,而不是使用new運算符直接實例化對象。這使得程序在判斷針對某個給定實例需要創建哪些對象時更加靈活。
工廠模式(Factory Pattern)
抽象工廠模式(Abstract Factory Pattern)
單例模式(Singleton Pattern)
建造者模式(Builder Pattern)
原型模式(Prototype Pattern)
1.4.2 結構型模式這些設計模式關注類和對象的組合。繼承的概念被用來組合接口和定義組合對象獲得新功能的方式。
適配器模式(Adapter Pattern)
橋接模式(Bridge Pattern)
過濾器模式(Filter、Criteria Pattern)
組合模式(Composite Pattern)
裝飾器模式(Decorator Pattern)
外觀模式(Facade Pattern)
享元模式(Flyweight Pattern)
代理模式(Proxy Pattern)
1.4.3 行為型模式這些設計模式特別關注對象之間的通信。
責任鏈模式(Chain of Responsibility Pattern)
命令模式(Command Pattern)
解釋器模式(Interpreter Pattern)
迭代器模式(Iterator Pattern)
中介者模式(Mediator Pattern)
備忘錄模式(Memento Pattern)
觀察者模式(Observer Pattern)
狀態模式(State Pattern)
空對象模式(Null Object Pattern)
策略模式(Strategy Pattern)
模板模式(Template Pattern)
訪問者模式(Visitor Pattern)
1.4.4 J2EE 模式這些設計模式特別關注表示層。這些模式是由Sun Java Center鑒定的。
MVC 模式(MVC Pattern)
業務代表模式(Business Delegate Pattern)
組合實體模式(Composite Entity Pattern)
數據訪問對象模式(Data Access Object Pattern)
前端控制器模式(Front Controller Pattern)
攔截過濾器模式(Intercepting Filter Pattern)
服務定位器模式(Service Locator Pattern)
傳輸對象模式(Transfer Object Pattern)
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/72482.html
摘要:在講解之前先回顧一下筆者在項目開發中的工作流變化時代此時工作流大致為結合插件處理視圖處理樣式等庫此時由于依賴少手動引入各種標簽結合調試界面時代利用指令服務控制器將邏輯拆分為多個文件利用編譯會將分為全局樣式和組件樣式下載各種依賴此時任需要手動 在講解 webpack 之前先回顧一下筆者在項目開發中的工作流變化. jquery 時代 此時工作流大致為 jquery 結合插件處理視圖 bo...
摘要:數據結構是指相互之間存在一種或多種特定關系的數據元素的集合。一個數據元素由若干數據項構成可認為是一個對象或者是數據庫的一條記錄。抽象數據類型抽象數據類型是一個實現包括儲存數據元素的存儲結構以及實現基本操作的算法。 前言 重要性 數據結構與算法是程序員內功體現的重要標準之一,而數據結構的也應用在各個方面,更有程序=數據結構+算法這個等式存在。各個中間件開發者,架構師。他們都在努力的優化中...
摘要:導語本文章匯總了本人在學習基礎之緒論篇數據結構篇函數篇面向對象篇控制流程篇和元編程篇學習筆記的鏈接,打算入門的朋友們可以按需查看并交流。 導語:本文章匯總了本人在學習Python基礎之緒論篇、數據結構篇、函數篇、面向對象篇、控制流程篇和元編程篇學習筆記的鏈接,打算入門Python的朋友們可以按需查看并交流。 第一部分:緒論篇 1、Python數據模型 第二部分:數據結構篇 2、序列構成...
閱讀 2255·2021-11-25 09:43
閱讀 3122·2021-10-14 09:42
閱讀 3484·2021-10-12 10:12
閱讀 1526·2021-09-07 10:17
閱讀 1900·2019-08-30 15:54
閱讀 3181·2019-08-30 15:54
閱讀 1550·2019-08-30 15:53
閱讀 1907·2019-08-29 11:21