欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

軟件開發(fā)基礎(chǔ)之設(shè)計模式概述

 更新時間:2022年09月24日 15:47:35   作者:tianClassmate  
這篇文章介紹了軟件開發(fā)基礎(chǔ)之設(shè)計模式,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

成為一名優(yōu)秀的軟件開發(fā)工程師,設(shè)計模式的重要性不言而喻,本章節(jié)是對設(shè)計模式的前置知識概述,涉及概念性較大,讀者可在設(shè)計模式學(xué)習(xí)過程中參閱本文檔。

在第一章節(jié),主要介紹軟件設(shè)計的七大原則,接著在第二章我們簡要介紹設(shè)計模式的三種分類,讓我們站在一定的高度對設(shè)計模式有整體的把握,第三章UML類圖幫助我們更好的看懂設(shè)計模式的代碼。

一、軟件設(shè)計七大原則

無論是在我們學(xué)習(xí)設(shè)計模式的過程中,還是日常的開發(fā)過程中,都要遵循一套統(tǒng)一的軟件設(shè)計原則。

在常見的設(shè)計原則中,一共是7 種設(shè)計原則,它們分別為開閉原則、里氏替換原則、依賴倒置原則、單一職責(zé)原則、接口隔離原則、迪米特法則和合成復(fù)用原則。

各種各樣的原則最終目的只有一句話,也是軟件開發(fā)人員聽過的最多的一句話:高內(nèi)聚、低耦合,提高復(fù)用性、可擴展性、可維護性。

設(shè)計原則一句話歸納目的
開閉原則對擴展開放,對修改關(guān)閉降低維護帶來的新風(fēng)險
依賴倒置原則高層不應(yīng)該依賴低層,要面向接口編程更利于代碼結(jié)構(gòu)的升級擴展
單一職責(zé)原則一個類只干一件事,實現(xiàn)類要單一便于理解,提高代碼的可讀性
接口隔離原則一個接口只干一件事,接口要精簡單一功能解耦,高聚合、低耦合
迪米特法則不該知道的不要知道,一個類應(yīng)該保持對其它對象最少的了解,降低耦合度只和朋友交流,不和陌生人說話,減少代碼臃腫
里氏替換原則不要破壞繼承體系,子類重寫方法功能發(fā)生改變,不應(yīng)該影響父類方法的含義防止繼承泛濫
合成復(fù)用原則盡量使用組合或者聚合關(guān)系實現(xiàn)代碼復(fù)用,少使用繼承降低代碼耦合

這些原則在我們開發(fā)過程中或多或少的都有體現(xiàn),比如在我們的項目中業(yè)務(wù)層總是定義Service接口,在Impl中實現(xiàn)具體的邏輯,很多開發(fā)只是照葫蘆畫瓢,卻并不知道為什么要這樣做,結(jié)合開發(fā)原則讀者可以仔細想一下為什么要這樣做。

還有一個典型的用法,我們定義的實體類的成員變量,總是用private修飾,然后定義get和set方法去操作這些成員變量,那為什么不直接把成員變量定義public,直接操作成員變量呢。

軟件設(shè)計原則在我們的開發(fā)中處處體現(xiàn),在一些代碼習(xí)慣上多思考,做到知其然知其所以然。

二、設(shè)計模式分類

在設(shè)計模式學(xué)習(xí)過程中可以查閱該文檔,學(xué)習(xí)每個設(shè)計模式時,對于他的作用和分類能做到心中有數(shù)。

1、創(chuàng)建型

創(chuàng)建型模式的主要關(guān)注點是“怎樣創(chuàng)建對象?”,它的主要特點是“將對象的創(chuàng)建與使用分離”。

  • 單例(Singleton)模式:某個類只能生成一個實例,該類提供了一個全局訪問點供外部獲取該實例,其拓展是有限多例模式。
  • 原型(Prototype)模式:將一個對象作為原型,通過對其進行復(fù)制而克隆出多個和原型類似的新實例。
  • 工廠方法(FactoryMethod)模式:定義一個用于創(chuàng)建產(chǎn)品的接口,由子類決定生產(chǎn)什么產(chǎn)品。
  • 抽象工廠(AbstractFactory)模式:提供一個創(chuàng)建產(chǎn)品族的接口,其每個子類可以生產(chǎn)一系列相關(guān)的產(chǎn)品。
  • 建造者(Builder)模式:將一個復(fù)雜對象分解成多個相對簡單的部分,然后根據(jù)不同需要分別創(chuàng)建它們,最后構(gòu)建成該復(fù)雜對象。

2、結(jié)構(gòu)型

結(jié)構(gòu)型模式描述如何將類或?qū)ο蟀茨撤N布局組成更大的結(jié)構(gòu)。它分為類結(jié)構(gòu)型模式和對象結(jié)構(gòu)型模式,前者采用繼承機制來組織接口和類,后者釆用組合或聚合來組合對象。

  • 代理(Proxy)模式:為某對象提供一種代理以控制對該對象的訪問。即客戶端通過代理間接地訪問該對象,從而限制、增強或修改該對象的一些特性。
  • 適配器(Adapter)模式:將一個類的接口轉(zhuǎn)換成客戶希望的另外一個接口,使得原本由于接口不兼容而不能一起工作的那些類能一起工作。
  • 橋接(Bridge)模式:將抽象與實現(xiàn)分離,使它們可以獨立變化。它是用組合關(guān)系代替繼承關(guān)系來實現(xiàn)的,從而降低了抽象和實現(xiàn)這兩個可變維度的耦合度。
  • 裝飾(Decorator)模式:動態(tài)地給對象增加一些職責(zé),即增加其額外的功能。
  • 外觀(Facade)模式:為多個復(fù)雜的子系統(tǒng)提供一個一致的接口,使這些子系統(tǒng)更加容易被訪問。
  • 享元(Flyweight)模式:運用共享技術(shù)來有效地支持大量細粒度對象的復(fù)用。
  • 組合(Composite)模式:將對象組合成樹狀層次結(jié)構(gòu),使用戶對單個對象和組合對象具有一致的訪問性。

3、行為型

行為型模式用于描述程序在運行時復(fù)雜的流程控制,即描述多個類或?qū)ο笾g怎樣相互協(xié)作共同完成單個對象都無法單獨完成的任務(wù),它涉及算法與對象間職責(zé)的分配。

行為型模式分為類行為模式和對象行為模式,前者采用繼承機制來在類間分派行為,后者采用組合或聚合在對象間分配行為。由于組合關(guān)系或聚合關(guān)系比繼承關(guān)系耦合度低,滿足“合成復(fù)用原則”,所以對象行為模式比類行為模式具有更大的靈活性。

  • 模板方法(Template Method)模式:定義一個操作中的算法骨架,將算法的一些步驟延遲到子類中,使得子類在可以不改變該算法結(jié)構(gòu)的情況下重定義該算法的某些特定步驟。
  • 策略(Strategy)模式:定義了一系列算法,并將每個算法封裝起來,使它們可以相互替換,且算法的改變不會影響使用算法的客戶。
  • 命令(Command)模式:將一個請求封裝為一個對象,使發(fā)出請求的責(zé)任和執(zhí)行請求的責(zé)任分割開。
  • 職責(zé)鏈(Chain of Responsibility)模式:把請求從鏈中的一個對象傳到下一個對象,直到請求被響應(yīng)為止。通過這種方式去除對象之間的耦合。
  • 狀態(tài)(State)模式:允許一個對象在其內(nèi)部狀態(tài)發(fā)生改變時改變其行為能力。
  • 觀察者(Observer)模式:多個對象間存在一對多關(guān)系,當(dāng)一個對象發(fā)生改變時,把這種改變通知給其他多個對象,從而影響其他對象的行為。
  • 中介者(Mediator)模式:定義一個中介對象來簡化原有對象之間的交互關(guān)系,降低系統(tǒng)中對象間的耦合度,使原有對象之間不必相互了解。
  • 迭代器(Iterator)模式:提供一種方法來順序訪問聚合對象中的一系列數(shù)據(jù),而不暴露聚合對象的內(nèi)部表示。
  • 訪問者(Visitor)模式:在不改變集合元素的前提下,為一個集合中的每個元素提供多種訪問方式,即每個元素有多個訪問者對象訪問。
  • 備忘錄(Memento)模式:在不破壞封裝性的前提下,獲取并保存一個對象的內(nèi)部狀態(tài),以便以后恢復(fù)它。
  • 解釋器(Interpreter)模式:提供如何定義語言的文法,以及對語言句子的解釋方法,即解釋器。

三、UML詳解

UML類圖摘抄自大話設(shè)計模式,我目前見過最好的一張圖,便于讀者理解。

在面向?qū)ο蟮氖澜缰?,包含了對象和接口,UML類圖主要是能表達出來對象和接口的表現(xiàn)和他們的關(guān)系。

對象和接口都是采用矩形框表示,因為對象包含類名、成員變量、成員方法所以用三層來表示,接口沒有成員變量,所以采用兩層來表示,為了更易于區(qū)分在接口名上《interface》,另外,抽象類用斜體表示。成員變量均有關(guān)鍵詞修飾,+代表public、-代表private、#代表protected

接下來說明類與類、接口與類之間關(guān)系的表達。

繼承,空心三角形+實線

實現(xiàn)接口,空心三角形+虛線

關(guān)聯(lián),實線。企鵝和氣候。

聚合,菱形+實現(xiàn)箭頭。雁群和大雁。

依賴,虛線箭頭。動物依賴水和氧氣才能生存。

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接

相關(guān)文章

  • Java過濾器與監(jiān)聽器間區(qū)別與聯(lián)系

    Java過濾器與監(jiān)聽器間區(qū)別與聯(lián)系

    監(jiān)聽器是一個接口內(nèi)容由我們實現(xiàn),會在特定時間被調(diào)用,監(jiān)聽器用于監(jiān)聽web應(yīng)用中三大域?qū)ο?request,session,application),信息的創(chuàng)建,銷毀,增加,修改,刪除等動作的發(fā)生,然后做出相應(yīng)的響應(yīng)處理
    2023-01-01
  • SpringBoot整合Mongodb實現(xiàn)增刪查改的方法

    SpringBoot整合Mongodb實現(xiàn)增刪查改的方法

    這篇文章主要介紹了SpringBoot整合Mongodb實現(xiàn)簡單的增刪查改,MongoDB是一個以分布式數(shù)據(jù)庫為核心的數(shù)據(jù)庫,因此高可用性、橫向擴展和地理分布是內(nèi)置的,并且易于使用。況且,MongoDB是免費的,開源的,感興趣的朋友跟隨小編一起看看吧
    2022-05-05
  • 三分鐘教你如何在IDEA中快速創(chuàng)建工程的方法

    三分鐘教你如何在IDEA中快速創(chuàng)建工程的方法

    這篇文章主要介紹了三分鐘教你如何在IDEA中快速創(chuàng)建工程的方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • Java日期格式化的實現(xiàn)(@JsonFormat和@JSONField)

    Java日期格式化的實現(xiàn)(@JsonFormat和@JSONField)

    本文主要介紹了Java日期格式化的實現(xiàn),主要介紹了@JsonFormat和@JSONField兩種方式,具有一定的參考價值,感興趣的可以了解一下
    2024-05-05
  • spring boot 集成 swagger3及配置方法

    spring boot 集成 swagger3及配置方法

    Swagger 3是一種開源的API描述工具,它可以幫助開發(fā)人員設(shè)計、構(gòu)建、文檔化和測試API,這篇文章主要介紹了spring boot 集成 swagger3,需要的朋友可以參考下
    2023-05-05
  • 關(guān)于LocalDateTime使用詳解

    關(guān)于LocalDateTime使用詳解

    這篇文章主要介紹了關(guān)于LocalDateTime使用,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • 詳解使用Spring Boot開發(fā)Web項目

    詳解使用Spring Boot開發(fā)Web項目

    這篇文章主要介紹了詳解使用Spring Boot開發(fā)Web項目,具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2017-04-04
  • SpringBoot中MybatisX插件的簡單使用教程(圖文)

    SpringBoot中MybatisX插件的簡單使用教程(圖文)

    MybatisX 是一款基于 IDEA 的快速開發(fā)插件,方便在使用mybatis以及mybatis-plus開始時簡化繁瑣的重復(fù)操作,本文主要介紹了SpringBoot中MybatisX插件的簡單使用教程,感興趣的可以了解一下
    2023-06-06
  • springboot3整合knife4j詳細圖文教程(swagger增強)

    springboot3整合knife4j詳細圖文教程(swagger增強)

    開發(fā)api提供對應(yīng)的接口規(guī)范進行聯(lián)調(diào)或并行開發(fā),api文檔管理必不可少,常用的Knife4j基于swagger(依賴已經(jīng)compile),可以進行管理,下面這篇文章主要給大家介紹了關(guān)于springboot3整合knife4j的相關(guān)資料,需要的朋友可以參考下
    2024-03-03
  • 淺談解決Hibernate懶加載的4種方式

    淺談解決Hibernate懶加載的4種方式

    這篇文章主要介紹了淺談解決Hibernate懶加載的4種方式,具有一定借鑒價值,需要的朋友可以參考下。
    2017-12-12

最新評論