国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

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

2019-11-14 10:32:50
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

引入設(shè)計(jì)模式的目的:增強(qiáng)系統(tǒng)的可維護(hù)性。

設(shè)計(jì)模式一般不能提高軟件的功能和性能。

 

設(shè)計(jì)模式(Design Patterns):從建筑領(lǐng)域而來(lái),是對(duì)軟件設(shè)計(jì)中普遍存在而又反復(fù)出現(xiàn)的各種問題,所提出的解決方案。

設(shè)計(jì)模式并不直接用來(lái)完成程序代碼的編寫,而是描述在各種不同的情況下,要如何解決問題的一種方案。

四人組針對(duì)創(chuàng)建優(yōu)秀的面向?qū)ο笤O(shè)計(jì)提出的建議

1、針對(duì)接口進(jìn)行設(shè)計(jì);

2、優(yōu)先使用對(duì)象組合,而不是類繼承;

3、找到并封裝變化點(diǎn)。

 

設(shè)計(jì)模式可以讓我們:

1、復(fù)用解決方案。利用已有的模式開發(fā),可以借鑒他人的經(jīng)驗(yàn),減少開發(fā)成本和風(fēng)險(xiǎn)。

2、建立通用術(shù)語(yǔ)。在項(xiàng)目的分析和設(shè)計(jì)階段,模式提供了約定俗成的詞匯和視角,有利于溝通。

3、解放視角。無(wú)論針對(duì)問題還是設(shè)計(jì),設(shè)計(jì)模式提供了高層次的視角,開發(fā)人員不必一開始就埋頭于具體的細(xì)節(jié)之中。

面相對(duì)象:

可維護(hù) 改

可復(fù)用 替換下來(lái)的字仍然有用

可擴(kuò)展 可加字

靈活性好 可豎排

 

通過(guò)封裝、繼承、多態(tài)把程序的耦合度降低。

用設(shè)計(jì)模式使得程序更加靈活,容易修改,并且易于復(fù)用。

編程原則之一:盡可能避免重復(fù)。

 

UML中的集中關(guān)系: 

依賴關(guān)系(Dependency):

類方法的形參或返回值為其他類的對(duì)象。

如,新陳代謝(in o2:氧氣,in water:水)。

虛線箭頭

 

關(guān)聯(lián)關(guān)系(Association):

一個(gè)類“知道”另一個(gè)類。

如,penguin知道climate。

實(shí)線箭頭

 

聚合關(guān)系(Aggregation):

表示一種弱的“擁有”關(guān)系,體現(xiàn)的是A對(duì)象可以包含B對(duì)象,但B對(duì)象不是A對(duì)象的一部分。

如,雁群擁有大雁。

空心菱形 +實(shí)線箭頭

 

合成關(guān)系(Composition):

是一種強(qiáng)的“擁有”關(guān)系,體現(xiàn)了嚴(yán)格的部分和整體的關(guān)系,部分和整體的生命周期一致。

如,大雁擁有翅膀。

實(shí)心菱形 +實(shí)線箭頭

設(shè)計(jì)模式遵循的幾個(gè)原則:單一職責(zé)原則:

就一個(gè)類而言,應(yīng)該僅有一個(gè)引起它變化的原因。

如果能夠想到多于一個(gè)的動(dòng)機(jī)去改變一個(gè)類,那么這個(gè)類就具有多于一個(gè)的職責(zé)。

軟件設(shè)計(jì)真正要做的許多內(nèi)容,就是發(fā)現(xiàn)職責(zé)并把那些職責(zé)相互分離。

 

開放封閉原則:

軟件實(shí)體(類、模塊、函數(shù)等等)可以擴(kuò)展,但是不可修改

對(duì)于擴(kuò)展開放(open for extension)

對(duì)于更改封閉(closed for modification)

怎樣的設(shè)計(jì)才能面對(duì)需求的改變卻可以保持相對(duì)穩(wěn)定,從而使得系統(tǒng)可以在第一個(gè)版本以后不斷推出新的版本呢?

無(wú)論模塊多么的“封閉”,都會(huì)存在一些無(wú)法對(duì)之封閉的變化。

既然不可能完全封閉,設(shè)計(jì)人員必須對(duì)于他設(shè)計(jì)的模塊應(yīng)該對(duì)那種變化封閉做出選擇。

他必須先猜測(cè)出最有可能發(fā)生的變化種類,然后構(gòu)造抽象來(lái)隔離那些變化。

 

等到變化發(fā)生時(shí)立即采取行動(dòng)。

在最初編寫代碼時(shí),假設(shè)變化不會(huì)發(fā)生。當(dāng)變化發(fā)生時(shí),就創(chuàng)建抽象來(lái)隔離以后發(fā)生的同類變化。

 

面對(duì)需求,對(duì)程序的改動(dòng)是通過(guò)增加新代碼進(jìn)行的,而不是更改現(xiàn)有的代碼。

 

希望的是在開發(fā)工作展開不久就知道可能發(fā)生的變化。

查明可能發(fā)生的變化所等待的時(shí)間越長(zhǎng),要?jiǎng)?chuàng)建的抽象就越困難。

 

開放封閉原則是面向?qū)ο笤O(shè)計(jì)的核心所在。

遵循這個(gè)原則可以帶來(lái)面向?qū)ο蠹夹g(shù)所聲稱的巨大好處,也就是可維護(hù)、可擴(kuò)展、可復(fù)用、靈活性好。

開發(fā)人員應(yīng)該僅對(duì)程序中呈現(xiàn)出頻繁變化的那些部分做出抽象。

然而,對(duì)于應(yīng)用程序的每個(gè)部分都刻意地進(jìn)行抽象同樣不是一個(gè)好主意。

拒絕不成熟的抽象和抽象本身一樣重要。

 

里氏代換原則:

子類型必須能夠替換掉它們的父類型。

即一個(gè)軟件實(shí)體如果使用的是一個(gè)父類的話,那么一定適用于其子類,而且它覺察不出父類對(duì)象和子類對(duì)象的區(qū)別。也就是說(shuō),在軟件里面,把父類都替換成它的子類,程序行為沒有變化。

只有當(dāng)子類可以替換掉父類,軟件單位的功能不受到影響時(shí),父類才能真正被復(fù)用,而子類也能夠在父類的基礎(chǔ)上增加新的行為。

正是由于子類型的可替換性才使得使用父類類型的模塊在無(wú)需修改的情況下就可以擴(kuò)展。

 

依賴倒轉(zhuǎn)原則:

A 高層模塊不應(yīng)該依賴底層模塊。兩個(gè)都應(yīng)該依賴抽象。

B 抽象不應(yīng)該依賴細(xì)節(jié)。細(xì)節(jié)應(yīng)該依賴抽象。

針對(duì)接口編程,不要對(duì)實(shí)現(xiàn)編程。

 

依賴倒轉(zhuǎn)其實(shí)可以說(shuō)是面向?qū)ο笤O(shè)計(jì)的標(biāo)志,用那種語(yǔ)言來(lái)編寫程序不重要,如果編寫時(shí)考慮的都是如何針對(duì)抽象編程而不是針對(duì)細(xì)節(jié)編程,即程序中所有的依賴關(guān)系都是終止于抽象類或者接口,那就是面向?qū)ο蟮脑O(shè)計(jì),反之那就是過(guò)程化設(shè)計(jì)了。

迪米特法則:

最少知識(shí)原則:

如果兩個(gè)類不必彼此直接通信,那么這兩個(gè)類就不應(yīng)當(dāng)發(fā)生直接的相互作用。

如果其中一個(gè)類需要調(diào)用另一個(gè)類的某一個(gè)方法的話,可以通過(guò)第三者轉(zhuǎn)發(fā)這個(gè)調(diào)用。

 

迪米特法則首先強(qiáng)調(diào)的前提是:在類的結(jié)構(gòu)設(shè)計(jì)上,每一個(gè)類都應(yīng)當(dāng)盡量降低成員的訪問權(quán)限。

迪米特法則其根本思想,是強(qiáng)調(diào)了類之間的松耦合。

類之間的耦合越弱,越有利于復(fù)用,一個(gè)處在弱耦合的類被修改,不會(huì)對(duì)有關(guān)系的類造成波及。


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 崇州市| 平原县| 香格里拉县| 黎城县| 潞西市| 星座| 那坡县| 微山县| 无为县| 南木林县| 沙洋县| 松桃| 渭源县| 武汉市| 华亭县| 资溪县| 邢台县| 尼木县| 闽侯县| 攀枝花市| 从江县| 宁远县| 鸡泽县| 桂东县| 怀化市| 汤阴县| 苍溪县| 武冈市| 平果县| 桑植县| 五寨县| 手游| 兴安县| 永春县| 财经| 江源县| 大同市| 石台县| 乐陵市| 宝兴县| 金堂县|