最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

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

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

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

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

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

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

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

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

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

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

1、創(chuàng)建型

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

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

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

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

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

3、行為型

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

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

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

三、UML詳解

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

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

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

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

繼承,空心三角形+實(shí)線

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

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

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

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

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

相關(guān)文章

  • 詳解Java中Duration類的使用方法

    詳解Java中Duration類的使用方法

    Duration類通過秒和納秒相結(jié)合來描述一個(gè)時(shí)間量,最高精度是納秒。本文將通過示例詳細(xì)為大家講講Duration類的使用,需要的可以參考一下
    2022-05-05
  • Java數(shù)據(jù)結(jié)構(gòu)與算法之單鏈表深入理解

    Java數(shù)據(jù)結(jié)構(gòu)與算法之單鏈表深入理解

    這篇文章主要介紹了Java數(shù)據(jù)結(jié)構(gòu)與算法之單鏈表深入理解,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-09-09
  • Java設(shè)計(jì)模式之裝飾模式詳解

    Java設(shè)計(jì)模式之裝飾模式詳解

    這篇文章主要介紹了Java設(shè)計(jì)模式之裝飾模式詳解,文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)java的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04
  • Java中的抽象類和接口你了解嗎

    Java中的抽象類和接口你了解嗎

    這篇文章主要為大家詳細(xì)介紹了Java中的抽象類和接口,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • Java獲取Excel中圖片所在的行和列坐標(biāo)位置

    Java獲取Excel中圖片所在的行和列坐標(biāo)位置

    這篇文章主要介紹了Java獲取Excel中圖片所在的行和列坐標(biāo)位置,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下
    2022-08-08
  • java實(shí)現(xiàn)數(shù)字炸彈

    java實(shí)現(xiàn)數(shù)字炸彈

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)數(shù)字炸彈,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • 例舉fastJson和jackson轉(zhuǎn)json的區(qū)別

    例舉fastJson和jackson轉(zhuǎn)json的區(qū)別

    今天小編就為大家分享一篇關(guān)于例舉fastJson和jackson轉(zhuǎn)json的區(qū)別,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • MyBatis Plus中代碼生成器使用詳解

    MyBatis Plus中代碼生成器使用詳解

    這篇文章主要介紹了MyBatis Plus中代碼生成器使用詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • SpringMVC實(shí)現(xiàn)賬號只能在一處登陸

    SpringMVC實(shí)現(xiàn)賬號只能在一處登陸

    這篇文章主要為大家詳細(xì)介紹了SpringMVC如何實(shí)現(xiàn)賬號只能在一處登陸,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • Java字符串無意識的遞歸過程解析

    Java字符串無意識的遞歸過程解析

    這篇文章主要介紹了Java字符串無意識的遞歸過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09

最新評論

肥西县| 容城县| 东明县| 长乐市| 海原县| 汉寿县| 通许县| 靖西县| 二连浩特市| 桃园市| 钦州市| 三亚市| 京山县| 德保县| 鄱阳县| 东城区| 城口县| 土默特右旗| 三原县| 平湖市| 万山特区| 南康市| 定陶县| 阿鲁科尔沁旗| 淄博市| 兴和县| 耒阳市| 班戈县| 广平县| 乡宁县| 越西县| 卫辉市| 商丘市| 泽普县| 呼图壁县| 喀喇沁旗| 遂昌县| 惠安县| 正阳县| 克拉玛依市| 阿拉善盟|