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