国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Java設(shè)計(jì)模式概述

leon / 480人閱讀

摘要:設(shè)計(jì)模式的類別設(shè)計(jì)模式一共分為種類型,共種。屬于結(jié)構(gòu)型的設(shè)計(jì)模式適配器模式橋接模式裝飾模式組合模式外觀模式享元模式代理模式。問(wèn)題描述了應(yīng)該在何時(shí)使用設(shè)計(jì)模式。解決方案描述了設(shè)計(jì)的組成成分,它們之間的相互關(guān)系及各自的職責(zé)和協(xié)作方式。

設(shè)計(jì)模式概述 1. 設(shè)計(jì)模式是什么

我們?cè)谄綍r(shí)編寫代碼的過(guò)程中,會(huì)遇到各種各樣的問(wèn)題,細(xì)想一下很多問(wèn)題的解決思路大致一樣的,這時(shí)候你就可以把解決問(wèn)題的思路整理清晰,成為一種解決問(wèn)題的核心模式,以后你就能使用這種模式解決類似的問(wèn)題,而不必絞盡腦汁尋找最優(yōu)解決方案。經(jīng)過(guò)多年各路大牛的貢獻(xiàn)和實(shí)踐,形成了一套系統(tǒng)的軟件設(shè)計(jì)模式。

設(shè)計(jì)模式是軟件工程的基石脈絡(luò),如同大廈的結(jié)構(gòu)一樣。之所以使用設(shè)計(jì)模式,根本原因是為了代碼復(fù)用,增加可維護(hù)性。

2. 設(shè)計(jì)模式的類別

設(shè)計(jì)模式一共分為3種類型,共23種。

1)創(chuàng)建型模式:創(chuàng)建型模式抽象了實(shí)例化過(guò)程。他們幫助一個(gè)系統(tǒng)獨(dú)立于如何創(chuàng)建、組合和表示他的對(duì)象。

屬于創(chuàng)建型的設(shè)計(jì)模式:

單例模式(Singleton)、抽象工廠模式(Abstract Factory)、工廠模式(Factory Method)、建造者模式(Builder)、原型模式(Prototype)。

2)結(jié)構(gòu)型模式:結(jié)構(gòu)型模式涉及到如何組合類和對(duì)象以畫的更大的結(jié)構(gòu),結(jié)構(gòu)型模式采用繼承或組合機(jī)制來(lái)組合接口或?qū)崿F(xiàn)。

屬于結(jié)構(gòu)型的設(shè)計(jì)模式:

適配器模式(Adapter)、橋接模式(Bridge)、裝飾模式(Decorator)、組合模式(Composite)、外觀模式(Facade)、享元模式(Flyweight)、代理模式(Proxy)。

3)行為型模式:行為模式設(shè)計(jì)到算法和對(duì)象間職責(zé)的分配。

屬于行為型的設(shè)計(jì)模式:

模塊方法模式(Template Method)、命令模式(Command)、迭代器模式(Iterator)、觀察者模式(Observer)、中介者模式(Mediator)、備忘錄模式(Memento)、解釋器模式(Interpreter)、狀態(tài)模式(State)、策略模式(Strategy)、職責(zé)鏈模式(Chain of Responsibility)、訪問(wèn)者模式(Visitor)。

學(xué)習(xí)任何一種設(shè)計(jì)模式都要從以下4點(diǎn)入手:

A.模式名稱:一個(gè)助記名,他用一兩個(gè)詞來(lái)描述模式的問(wèn)題、解決方案和效果。

B.問(wèn)題:描述了應(yīng)該在何時(shí)使用設(shè)計(jì)模式。

C.解決方案:描述了設(shè)計(jì)的組成成分,它們之間的相互關(guān)系及各自的職責(zé)和協(xié)作方式。

D.效果:描述了模式的應(yīng)用效果及使用模式應(yīng)權(quán)衡的問(wèn)題。

3. 設(shè)計(jì)模式的意圖

每種設(shè)計(jì)模式都致力于解決一種問(wèn)題,以下表格列舉了這些設(shè)計(jì)模式的作用。

設(shè)計(jì)模式 意圖/作用
創(chuàng)建型模式
單例模式 保證一個(gè)類僅有一個(gè)實(shí)例,并提供一個(gè)訪問(wèn)它的全局訪問(wèn)點(diǎn)。
抽象工廠模式 提供一個(gè)創(chuàng)建一系列相關(guān)或相互依賴對(duì)象的接口,而無(wú)需指定他們具體的類。
工廠模式 定義一個(gè)用于創(chuàng)建對(duì)象的接口,讓子類決定實(shí)例化哪一個(gè)類,工廠模式使用一個(gè)類的實(shí)例化延遲到其子類。
建造者模式 將一個(gè)復(fù)雜對(duì)象的構(gòu)建與他的表示分離,使得同樣的構(gòu)建過(guò)程可以創(chuàng)建不同的表示。
原型模式 用原型實(shí)例指定創(chuàng)建對(duì)象的種類,并且通過(guò)拷貝這些原型創(chuàng)建新的對(duì)象。
結(jié)構(gòu)型模式
適配器模式 將一個(gè)類的接口轉(zhuǎn)化成客戶需要的另外一個(gè)接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些類可以一起工作。
組合模式 將對(duì)象組合成樹型結(jié)構(gòu)以表示“部分-整體”的層次結(jié)構(gòu)。Composite使得用戶對(duì)單個(gè)對(duì)象和組合對(duì)象的使用具有一致性。
代理模式 為其他對(duì)象那提供一種代理以控制對(duì)這個(gè)對(duì)象的訪問(wèn)。
橋接模式 將抽象部分和實(shí)現(xiàn)部分分離,使他們都可以獨(dú)立的變化。
裝飾模式 動(dòng)態(tài)的給一個(gè)對(duì)象添加一些額外的職責(zé)。就增加功能來(lái)說(shuō),Decorator模式相比生成子類更為靈活。
外觀模式 為子系統(tǒng)的一組接口提供一個(gè)一致的界面,F(xiàn)acade模式定義了一個(gè)高層接口,這個(gè)接口使得這一子系統(tǒng)更加容易使用。
享元模式 運(yùn)用共享技術(shù)有效地支持大量細(xì)粒度的對(duì)象。
行為模式
觀察者模式 定義對(duì)象間的一種一對(duì)多的依賴關(guān)系,當(dāng)一個(gè)對(duì)象的狀態(tài)發(fā)生改變時(shí),所有依賴于它的對(duì)象都得到通知并被自動(dòng)更新。
中介者模式 用一個(gè)中介對(duì)象來(lái)封裝一系列的對(duì)象交互。中介者使各種對(duì)象不需要顯式地互相引用,從而使其耦合松散,而且可以獨(dú)立地改變他們之間的交互。
職責(zé)鏈模式 使多個(gè)對(duì)象都有機(jī)會(huì)處理請(qǐng)求,從而避免請(qǐng)求的發(fā)送者和接收者之間的耦合關(guān)系。將這些對(duì)象連成一條鏈,并沿著這條鏈傳遞該請(qǐng)求,直到一個(gè)對(duì)象處理他為止。
命令模式 將一個(gè)請(qǐng)求封裝成一個(gè)對(duì)象,從而使你可用不同的請(qǐng)求對(duì)客戶進(jìn)行參數(shù)化;對(duì)請(qǐng)求排隊(duì)或記錄請(qǐng)求日志,以及支持可撤銷的操作。
解釋器模式 給定一個(gè)語(yǔ)言,定義它的語(yǔ)法的一種表示,并定義一個(gè)解釋器,這個(gè)解釋器使用該表示來(lái)解釋語(yǔ)言中的句子。
迭代器模式 提供一種方法順序訪問(wèn)聚合對(duì)象中各個(gè)元素,而不需暴露該對(duì)象的內(nèi)部表示。
備忘錄模式 在不破壞封裝的前提下,捕獲一個(gè)對(duì)象的內(nèi)部狀態(tài),并在該對(duì)象之外保存這個(gè)狀態(tài)。這樣以后就可將該對(duì)象恢復(fù)到原先保存的狀態(tài)。
狀態(tài)模式 允許一個(gè)對(duì)象在其內(nèi)部狀態(tài)改變時(shí)改變它的行為。對(duì)象看起來(lái)似乎修改了它的種類。
策略模式 定義一系列的算法將他們一個(gè)個(gè)的封裝起來(lái),并且使他們可相互替換。本模式使得算法可獨(dú)立于使用它的客戶而變化。
模板方法模式 定義一個(gè)操作中的算法的骨架,而將一些步驟延遲到子類中。TemplateMethod使得子類可以不改變一個(gè)算法的結(jié)構(gòu)即可重定義該算法的某些特定步驟。
訪問(wèn)者模式 表示一個(gè)作用于某對(duì)象結(jié)構(gòu)中的各元素的操作。它使得你可以在不改變各元素的類的前提下定義作用于這些元素的新操作。

如果多的設(shè)計(jì)模式,初學(xué)者必須都要掌握,只需要掌握比較常用的幾種:

創(chuàng)新型模式:?jiǎn)卫J健⒊橄蠊S模式、建造者模式、工廠模式。

結(jié)構(gòu)型模式:適配器模式、組合模式、代理模式。

行為型模式:觀察者模式、中介者模式。

以上就是23種設(shè)計(jì)模式的概述,學(xué)習(xí)之路任重而道遠(yuǎn)啊!

4. 設(shè)計(jì)原則

除了設(shè)計(jì)模式,也需要了解一下設(shè)計(jì)原則,這里給出一些設(shè)計(jì)原則的基本介紹。

開閉原則:

開閉原則具有理想主義的色彩,它是面向?qū)ο笤O(shè)計(jì)的終極目標(biāo)。

模塊應(yīng)對(duì)擴(kuò)展開放,對(duì)修改關(guān)閉,模塊應(yīng)該在不修改源碼的情況下進(jìn)行擴(kuò)展。

里氏代換原則:

如果調(diào)用的是父類的話,那么換成子類也完全可以運(yùn)行。

Java編譯程序會(huì)檢查程序是否符合里氏代換原則。還記得java繼承的一個(gè)原則嗎?子類override方法的訪問(wèn)權(quán)限不能小于父類對(duì)應(yīng)方法的訪問(wèn)權(quán)限。里氏代換原則是繼承復(fù)用的一個(gè)基礎(chǔ)。

依賴倒序原則:

所謂依賴倒序原則是要依賴于抽象,不要依賴于具體。簡(jiǎn)單的說(shuō)就是要求對(duì)抽象進(jìn)行編程,不要對(duì)實(shí)現(xiàn)進(jìn)行編程,這樣就降低了實(shí)現(xiàn)與客戶之間的耦合。傳遞參數(shù),或在組合聚合關(guān)系中,盡量引用層次高的類

接口隔離原則:

使用專門的接口比使用單一的總接口要好;

一個(gè)類對(duì)另一個(gè)類的依賴應(yīng)該建立在最小的接口上;

一個(gè)接口代表一個(gè)角色,不應(yīng)該將不用的角色交給一個(gè)接口。沒(méi)有關(guān)系的接口合并在一起形成一個(gè)臃腫的大接口,這是對(duì)角色和接口的污染;

不要強(qiáng)迫客戶使用它們不用的方法,如果強(qiáng)迫客戶使用它們不用的方法,那么這些客戶就會(huì)面臨這些不使用的方法的改變而帶來(lái)的改變。

合成/聚合復(fù)用原則:

合成/聚合復(fù)用原則就是在一個(gè)新的對(duì)象里面使用一些已有的對(duì)象,使之成為新對(duì)象的一部分;新的對(duì)象通過(guò)向這些對(duì)象的委派達(dá)到復(fù)用已有功能的目的。它的設(shè)計(jì)原則是:要盡量使用合成/聚合,盡量不要使用繼承。

就是說(shuō)要少用繼承,多用組合關(guān)系來(lái)實(shí)現(xiàn)。否則修改父類的一個(gè)方法,各個(gè)子類都需要改動(dòng)。“牽一發(fā)而動(dòng)全身”!面向?qū)ο笫且巡▌?dòng)限制在盡量小的范圍。

最小知識(shí)原則(迪米特法則):

也叫迪米特法則。不要和陌生人說(shuō)話,即一個(gè)對(duì)象應(yīng)對(duì)其他對(duì)象有盡可能少的了解。迪米特法則的初衷是為了降低類之間的耦合,每個(gè)類盡量減少對(duì)其他類的依賴,這樣系統(tǒng)的功能模塊才更容易獨(dú)立。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/68890.html

相關(guān)文章

  • Java包的基本概述

    摘要:第七章包的基本概述起因在我們?cè)O(shè)計(jì)一個(gè)程序的時(shí)候尤其是多人合作,會(huì)寫一些類來(lái)實(shí)現(xiàn)功能,但是往往會(huì)有重名的現(xiàn)象發(fā)生,為了解決這個(gè)問(wèn)題,則專門設(shè)計(jì)了包。概念為了更好地組織類,提供了包機(jī)制,用于區(qū)別類名的命名空間。 第七章 7.1 包的基本概述 起因: 在我們?cè)O(shè)計(jì)一個(gè)程序的時(shí)候(尤其是多人合作),會(huì)寫一些類來(lái)實(shí)現(xiàn)功能,但是往往會(huì)有重名的現(xiàn)象發(fā)生,為了解決這個(gè)問(wèn)題,則專門設(shè)計(jì)了包。(還有其他作用...

    Baaaan 評(píng)論0 收藏0
  • Java性能調(diào)優(yōu)概述

    摘要:性能調(diào)優(yōu)概述性能優(yōu)化有風(fēng)險(xiǎn)和弊端,性能調(diào)優(yōu)必須有明確的目標(biāo),不要為了調(diào)優(yōu)而調(diào)優(yōu)盲目調(diào)優(yōu),風(fēng)險(xiǎn)遠(yuǎn)大于收益程序性能的主要表現(xiàn)點(diǎn)執(zhí)行速度程序的反映是否迅速,響應(yīng)時(shí)間是否足夠短內(nèi)存分配內(nèi)存分配是否合理,是否過(guò)多地消耗內(nèi)存或者存在內(nèi)存泄漏啟動(dòng)時(shí)間程序 [TOC] Java性能調(diào)優(yōu)概述 性能優(yōu)化有風(fēng)險(xiǎn)和弊端,性能調(diào)優(yōu)必須有明確的目標(biāo),不要為了調(diào)優(yōu)而調(diào)優(yōu)!!!盲目調(diào)優(yōu),風(fēng)險(xiǎn)遠(yuǎn)大于收益!!! 程序性...

    ad6623 評(píng)論0 收藏0
  • Java多線程進(jìn)階(一)—— J.U.C并發(fā)包概述

    摘要:整個(gè)包,按照功能可以大致劃分如下鎖框架原子類框架同步器框架集合框架執(zhí)行器框架本系列將按上述順序分析,分析所基于的源碼為。后,根據(jù)一系列常見(jiàn)的多線程設(shè)計(jì)模式,設(shè)計(jì)了并發(fā)包,其中包下提供了一系列基礎(chǔ)的鎖工具,用以對(duì)等進(jìn)行補(bǔ)充增強(qiáng)。 showImg(https://segmentfault.com/img/remote/1460000016012623); 本文首發(fā)于一世流云專欄:https...

    anonymoussf 評(píng)論0 收藏0
  • Java設(shè)計(jì)模式0】概述

    占坑有空寫

    antz 評(píng)論0 收藏0
  • 第八章-Java常用API#yyds干貨盤點(diǎn)#

    摘要:常用類概述包含執(zhí)行基本數(shù)字運(yùn)算的方法沒(méi)有構(gòu)造方法,如何使用類中的成員呢看類的成員是否都是靜態(tài)的,如果是,通過(guò)類名就可以直接調(diào)用。所有類都直接或間接的繼承該類。 1 常用API1.1 Math1.1.1 Math類概述Math包含執(zhí)行基本數(shù)字運(yùn)算的方法沒(méi)有構(gòu)造方法,如何使用類中的成員呢?看類的成員是否都是靜態(tài)的,...

    番茄西紅柿 評(píng)論0 收藏2637

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<