日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

设计模式开篇

發(fā)布時(shí)間:2024/10/14 asp.net 277 豆豆
生活随笔 收集整理的這篇文章主要介紹了 设计模式开篇 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1. 設(shè)計(jì)模式簡(jiǎn)介

  • 設(shè)計(jì)模式(Design pattern)代表了最佳的實(shí)踐,通常被有經(jīng)驗(yàn)的面向?qū)ο蟮能浖_發(fā)人員所采用。
  • 設(shè)計(jì)模式是軟件開發(fā)人員在軟件開發(fā)過程中面臨的一般問題的解決方案。這些解決方案是眾多軟件開發(fā)人員經(jīng)過相當(dāng)長(zhǎng)的一段時(shí)間的試驗(yàn)和錯(cuò)誤總結(jié)出來的。
  • 設(shè)計(jì)模式是一套被反復(fù)使用的、多數(shù)人知曉的、經(jīng)過分類編目的、代碼設(shè)計(jì)經(jīng)驗(yàn)的總結(jié)。使用設(shè)計(jì)模式是為了重用代碼、讓代碼更容易被他人理解、保證代碼可靠性。
  • 設(shè)計(jì)模式使代碼編制真正工程化,設(shè)計(jì)模式是軟件工程的基石,如同大廈的一塊塊磚石一樣。
  • 項(xiàng)目中合理地運(yùn)用設(shè)計(jì)模式可以完美地解決很多問題,每種模式在現(xiàn)實(shí)中都有相應(yīng)的原理來與之對(duì)應(yīng),每種模式都描述了一個(gè)在我們周圍不斷重復(fù)發(fā)生的問題,以及該問題的核心解決方案。

2. 什么是 GOF?

  • 在 1994 年,由 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides 四人合著出版了一本名為 Design Patterns - Elements of Reusable Object-Oriented Software(中文譯名:設(shè)計(jì)模式 - 可復(fù)用的面向?qū)ο筌浖?#xff09; 的書,該書首次提到了軟件開發(fā)中設(shè)計(jì)模式的概念。

? 圖書鏈接:https://book.douban.com/subject/1052241/

  • 四位作者合稱 GOF(四人幫,全拼 Gang of Four)

  • 他們所提出的設(shè)計(jì)模式主要是基于以下的面向?qū)ο笤O(shè)計(jì)原則:

    • 對(duì)接口編程而不是對(duì)實(shí)現(xiàn)編程。
    • 優(yōu)先使用對(duì)象組合而不是繼承。

3. 23種設(shè)計(jì)模式的類型

  • 根據(jù)設(shè)計(jì)模式的參考書 Design Patterns - Elements of Reusable Object-Oriented Software(中文譯名:設(shè)計(jì)模式 - 可復(fù)用的面向?qū)ο筌浖?#xff09; 中所提到的,總共有 23 種設(shè)計(jì)模式。

  • 這些模式可以分為三大類:

    • 創(chuàng)建型模式(Creational Patterns)
    • 結(jié)構(gòu)型模式(Structural Patterns)
    • 行為型模式(Behavioral Patterns)
    • 還有另一類設(shè)計(jì)模式:J2EE 設(shè)計(jì)模式。
序號(hào)模式 & 描述包括
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)
2結(jié)構(gòu)型模式 這些設(shè)計(jì)模式關(guān)注類和對(duì)象的組合。繼承的概念被用來組合接口和定義組合對(duì)象獲得新功能的方式。適配器模式(Adapter Pattern)橋接模式(Bridge Pattern)過濾器模式(Filter、Criteria Pattern)組合模式(Composite Pattern)裝飾器模式(Decorator Pattern)外觀模式(Facade Pattern)享元模式(Flyweight Pattern)代理模式(Proxy Pattern)
3行為型模式 這些設(shè)計(jì)模式特別關(guān)注對(duì)象之間的通信,負(fù)責(zé)對(duì)象間的高效溝通和職責(zé)委派。責(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)訪問者模式(Visitor Pattern)
4J2EE 模式 這些設(shè)計(jì)模式特別關(guān)注表示層。這些模式是由 Sun Java Center 鑒定的。MVC 模式(MVC Pattern)業(yè)務(wù)代表模式(Business Delegate Pattern)組合實(shí)體模式(Composite Entity Pattern)數(shù)據(jù)訪問對(duì)象模式(Data Access Object Pattern)前端控制器模式(Front Controller Pattern)攔截過濾器模式(Intercepting Filter Pattern)服務(wù)定位器模式(Service Locator Pattern)傳輸對(duì)象模式(Transfer Object Pattern)

4. 模式之間的關(guān)系

5. 設(shè)計(jì)模式六大原則與核心思想

5.1 六大原則

1、開閉原則(Open Close Principle)

開閉原則的意思是:對(duì)擴(kuò)展開放,對(duì)修改關(guān)閉。在程序需要進(jìn)行拓展的時(shí)候,不能去修改原有的代碼,實(shí)現(xiàn)一個(gè)熱插拔的效果。簡(jiǎn)言之,是為了使程序的擴(kuò)展性好,易于維護(hù)和升級(jí)。想要達(dá)到這樣的效果,我們需要使用接口和抽象類。

2、里氏代換原則(Liskov Substitution Principle)

里氏代換原則中說,任何基類可以出現(xiàn)的地方,子類一定可以出現(xiàn)。LSP 是繼承復(fù)用的基石,只有當(dāng)派生類可以替換掉基類,且軟件單位的功能不受到影響時(shí),基類才能真正被復(fù)用,而派生類也能夠在基類的基礎(chǔ)上增加新的行為。里氏代換原則是對(duì)開閉原則的補(bǔ)充。實(shí)現(xiàn)開閉原則的關(guān)鍵步驟就是抽象化,而基類與子類的繼承關(guān)系就是抽象化的具體實(shí)現(xiàn),所以里氏代換原則是對(duì)實(shí)現(xiàn)抽象化的具體步驟的規(guī)范。

3、依賴倒轉(zhuǎn)原則(Dependence Inversion Principle)

這個(gè)原則是開閉原則的基礎(chǔ),具體內(nèi)容:針對(duì)接口編程,依賴于抽象而不依賴于具體。

4、接口隔離原則(Interface Segregation Principle)

這個(gè)原則的意思是:使用多個(gè)隔離的接口,比使用單個(gè)接口要好。它還有另外一個(gè)意思是:降低類之間的耦合度。

5、迪米特法則,又稱最少知道原則(Demeter Principle)

最少知道原則是指:一個(gè)實(shí)體應(yīng)當(dāng)盡量少地與其他實(shí)體之間發(fā)生相互作用,使得系統(tǒng)功能模塊相對(duì)獨(dú)立。

6、合成復(fù)用原則(Composite Reuse Principle)

合成復(fù)用原則是指:盡量使用合成/聚合的方式,而不是使用繼承。

5.2 核心思想

  • 找出應(yīng)用中可能需要變化之處,把它們獨(dú)立出來,不要和那些不需要變化的代碼混在一起。
  • 針對(duì)接口編程,而不是針對(duì)實(shí)現(xiàn)編程。
  • 為了交互對(duì)象之間的松耦合設(shè)計(jì)而努力
  • 6. 類之間的關(guān)系

    在類之間, 最常見的關(guān)系有:

  • 泛化/繼承(Generalization)
  • 實(shí)現(xiàn)(Realization)
  • 依賴(Dependency)
  • 關(guān)聯(lián)(Association)
  • 聚合(Aggregation)
  • 組合(Composition)
  • 6.1 泛化/繼承

    • 含義:繼承指的是一個(gè)類(稱為子類、子接口)繼承另外的一個(gè)類(稱為父類、父接口)的功能,并可以增加它自己的新功能的能力。
    • 代碼體現(xiàn):在Java中繼承關(guān)系通過關(guān)鍵字extends明確標(biāo)識(shí)
    • 箭頭指向:繼承用一條帶空心三角箭頭的實(shí)線表示,從子類指向父類,或者子接口指向父接口。

    6.2 實(shí)現(xiàn)

    • 含義:實(shí)現(xiàn)指的是一個(gè)class類實(shí)現(xiàn)interface接口(可以是多個(gè))的功能,實(shí)現(xiàn)是類與接口之間最常見的關(guān)系。
    • 代碼體現(xiàn):在Java中此類關(guān)系通過關(guān)鍵字implements明確標(biāo)識(shí)
    • 箭頭指向:實(shí)現(xiàn)用一條帶空心三角箭頭的虛線表示,從類指向?qū)崿F(xiàn)的接口。

    6.3 依賴

    • 含義:一種使用的關(guān)系,即一個(gè)類的實(shí)現(xiàn)需要另一個(gè)類的協(xié)助,要盡量不使用雙向的互相依賴.
      這種使用關(guān)系是具有偶然性的、臨時(shí)性的、非常弱的,類B的變化會(huì)影響到類A。
    • 代碼表現(xiàn):局部變量、方法的參數(shù)或者對(duì)靜態(tài)方法的調(diào)用;類B作為方法參數(shù)(局部變量)被類A在某個(gè)method方法中使用
    • 箭頭指向:用帶箭頭的虛線表示,指向被使用者

    6.4 關(guān)聯(lián)

    • 含義:是一種擁有的關(guān)系,它使一個(gè)類知道另一個(gè)類的屬性和方法;
      這種關(guān)系比依賴更強(qiáng)、不存在依賴關(guān)系的偶然性、關(guān)系也不是臨時(shí)性的,一般是長(zhǎng)期性的,而且雙方的關(guān)系一般是平等的。
      如:老師與學(xué)生,丈夫與妻子關(guān)聯(lián)可以是雙向的,也可以是單向的。雙向的關(guān)聯(lián)可以有兩個(gè)箭頭或者沒有箭頭,單向的關(guān)聯(lián)有一個(gè)箭頭。
    • 代碼體現(xiàn):成員變量。被關(guān)聯(lián)類B以類的屬性形式出現(xiàn)在關(guān)聯(lián)類A中,也可能是關(guān)聯(lián)類A引用了一個(gè)類型為被關(guān)聯(lián)類B的全局變量。
    • 箭頭指向: 帶普通箭頭的實(shí)心線,指向被擁有者

    6.5 聚合

    • 含義:聚合是關(guān)聯(lián)關(guān)系的一種特例,它體現(xiàn)的是整體與部分的關(guān)系,即has-a的關(guān)系。
      此時(shí)整體與部分之間是可分離的,它們可以具有各自的生命周期,部分可以屬于多個(gè)整體對(duì)象,也可以為多個(gè)整體對(duì)象共享。
      比如計(jì)算機(jī)與CPU、公司與員工的關(guān)系等,比如一個(gè)航母編隊(duì)包括海空母艦、驅(qū)護(hù)艦艇、艦載飛機(jī)及核動(dòng)力攻擊潛艇等。
    • 代碼體現(xiàn):成員變量;和關(guān)聯(lián)關(guān)系是一致的,只能從語義級(jí)別來區(qū)分
    • 箭頭指向:帶空心菱形的實(shí)心線,菱形指向整體

    6.6 組合

    • 含義:組合也是關(guān)聯(lián)關(guān)系的一種特例,它體現(xiàn)的是一種contains-a的關(guān)系,這種關(guān)系比聚合更強(qiáng),也稱為強(qiáng)聚合。它同樣體現(xiàn)整體與部分間的關(guān)系,但此時(shí)整體與部分是不可分的,整體的生命周期結(jié)束也就意味著部分的生命周期結(jié)束,
      比如人和人的大腦。比如公司和部門是整體和部分的關(guān)系,沒有公司就不存在部門。
    • 代碼體現(xiàn):成員變量;和關(guān)聯(lián)關(guān)系是一致的,只能從語義級(jí)別來區(qū)分
    • 箭頭指向:帶實(shí)心菱形的實(shí)線,菱形指向整體

    6.7 強(qiáng)弱順序

    各種關(guān)系的強(qiáng)弱順序:泛化/繼承 = 實(shí)現(xiàn) > 組合 > 聚合 > 關(guān)聯(lián) > 依賴

    6.8 一張圖融會(huì)貫通

    下面這張UML圖,比較形象地展示了各種類圖關(guān)系:

    總結(jié)

    以上是生活随笔為你收集整理的设计模式开篇的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。