亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

使用設計模式改善程序結構(一)

2019-11-18 13:43:56
字體:
來源:轉載
供稿:網友

設計模式是對特定問題經過無數次經驗總結后提出的能夠解決它的優雅的方案。但是,假如想要真正使設計模式發揮最大作用,僅僅知道設計模式是什么,以及它是如何實現的是很不夠的,因為那樣就不能使你對于設計模式有真正的理解,也就不能夠在自己的設計中正確、恰當的使用設計模式。本文試圖從另一個角度(設計模式的意圖、動機)來看待設計模式,通過這種新的思路,設計模式會變得非常貼近你的設計過程,并且能夠指導、簡化你的設計,最終將會導出一個優秀的解決方案。

1、介紹

在進行項目的開發活動中,有一些設計在項目剛剛開始工作的很好,但是隨著項目的進展,發現需要對已有的代碼進行修改或者擴展,導致這樣做的原因主要有:新的功能需求的需要以及對系統進一步理解。在這個時候,我們往往會發現進行這項工作比較困難,即使能完成也要付出很大的代價。此時,一個必須要做的工作就是要對現有的代碼進行重構(refactoring),通過重構使得我們接下來的工作變得相對輕易。

重構就是在不改變軟件系統代碼的外部行為的前提下,改善它的內部結構。重構的目標就是使代碼結構更加合理,富有彈性,能夠適應新的需求、新的變化。對于特定問題給出美麗解決方案的設計模式往往會成為重構的目標,而且一旦我們能夠識別出能夠解決我們問題的設計模式,將會大大簡化我們的工作,因為我們可以重用別人已經做過的工作。但是在我們的原始設計和最終可能會適用于我們的設計模式間的過渡并不是平滑的,而是有一個間隙。這樣的結果就是:即使我們已經知道了很多的設計模式,面對我們的實際問題,我們也沒有一個有效的方法去判定哪一個設計模式適用于我們的系統,我們應該去怎樣應用它。

造成上述問題的原因往往是由于過于注重設計模式所給出的解決方案這個結果,而對于設計模式的意圖,以及它產生的動機卻忽略了。然而,正是設計模式的意圖、動機促使人們給出了一個解決一類問題的方案這個結果,設計模式的動機、意圖體現了該模式的形成思路,所以更加貼近我們的實際問題,從而會有效的指導我們的重構歷程。本文將通過一個實例來展示這個過程。

在本文中對例子進行了簡化,這樣做是為了突出問題的實質并且會使我們的思路更加清楚。思路本身才是最重要、最根本的,簡化了的例子不會降低我們所展示的思路、方法的適用性。

2、問題描述

一個完善的軟件系統,必須要對出現的錯誤進行相應的處理,只有這樣才能使系統足夠的健壯,我預備以軟件系統中對于錯誤的處理為例,來展示我所使用的思路、方法。

在一個分布式的網管系統中,一個操作往往不會一定成功,經常會因為這樣或者那樣的原因失敗,此時我們就要根據失敗的原因相應的處理,使錯誤的影響局限在最小的范圍內,最好能夠恢復而不影響系統的正常運行,還有一點很重要,那就是在對錯誤進行處理的同時,一定不要忘記通知系統的治理者,因為只有治理者才有能力對錯誤進行進一步的分析,從而查找出錯誤的根源,從根本上解決錯誤。

下面我就從錯誤處理的通告治理者部分入手,開始我們的旅程。假定一個在一個分布式環境中訪問數據庫的操作,那么就有可能因為通信的原因或者數據庫本身的原因失敗,此時我們要通過用戶界面來通知治理者發生的錯誤。簡化了的代碼示例如下:

/* 錯誤碼定義 */

class ErrorConstant

{

public static final int ERROR_DBaccess     =  100;

public static final int ERROR_COMMUNICATION  =  101;

}

/* 省略了用戶界面中的其他的功能 */

class GUISys

{

public void announceError(int errCode) {

switch(errCode) {

case ErrorConstant.ERROR_DBACCESS:

/* 通告治理者數據庫訪問錯誤的發生*/

break;

case ErrorConstant.ERROR_COMMUNICATION:

/* 通告治理者通信錯誤的發生*/

break;

}

}

}

開始,這段代碼工作的很好,能夠完成我們需要的功能。但是這段代碼缺少相應的彈性,很難適應需求的變化。

3、問題分析

熟悉面向對象的讀者很快就會發現上面的代碼是典型的結構化的方法,結構化的方法是以具體的功能為核心來組織程序的結構,它的封裝度僅為1級,即僅有對于特定的功能的封裝(函數)。這使得結構化的方法很難適應需求的變化,面向對象的方法正是在這一點上優于結構化的方法。在面向對象領域,是以對象來組成程序結構的,一個對象有自己的職責,通過對象間的交互來完成系統的功能,這使得它的封裝度至少為2級,即封裝了為完成自己職責的方法和數據。另外面向對象的方法還支持更高層次的封裝,比如:通過對于不同的具體對象的共同的概念行為進行描述,我們可以達到3級的封裝度- 抽象的類(在java中就是接口)。封裝的層次越高,抽象的層次就越高,使得設計、代碼有越高的彈性,越輕易適應變化。

考慮對上一節中的代碼,假如在系統的開發過程中發現需要對一種新的錯誤進行處理,比如:用戶認證錯誤,我們該如何做使得我們的系統能夠增加對于此項功能的需求呢?一種比較簡單、直接的做法就是在增加一條用來處理此項錯誤的case語句。是的,這種方法的確能夠工作,但是這樣做是要付出代價的。

首先,隨著系統的進一步開發,可能會出現更多的錯誤類型,那么就會導致對于錯誤的處理部分代碼冗長,不利于維護。其次,也是最根本的一點,修改已經能夠工作的代碼,很輕易引入錯誤,并且在很多的情況下,錯誤都是在不經意下引入的,對于這種類型的錯誤很難定位。有調查表明,我們在開發過程中,用于修正錯誤的時間并不多,大部分的時間是在調試、發現錯誤。在面向對象領域,有一個很聞名的原則:OCP(Open-Closed PRinciple),它的核心含意是:一個好的設計應該能夠容納新的功能需求的增加,但是增加的方式不是通過修改又有的模塊(類),而是通過增加新的模塊(類)來完成的。假如一個設計能夠遵循OCP,那么就能夠有效的避免上述的問題。



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
色综合天天狠天天透天天伊人| 国产精品美女www爽爽爽视频| 久久久久久国产三级电影| 日韩欧美国产一区二区| 久久久女女女女999久久| 中文字幕亚洲第一| 成人字幕网zmw| 57pao精品| 亚洲理论在线a中文字幕| 欧美洲成人男女午夜视频| 欧美激情小视频| 日韩国产激情在线| 色悠悠久久久久| 91国内免费在线视频| 日韩国产高清污视频在线观看| 日本国产一区二区三区| 2018中文字幕一区二区三区| 国产日韩精品在线观看| 欧美性xxxx极品hd欧美风情| 欧美成人免费在线观看| 日韩精品欧美激情| 国产亚洲一区精品| 亚洲小视频在线观看| 久久久久久久一区二区| 欧美富婆性猛交| 91在线观看免费| 亚洲成人久久网| 在线电影欧美日韩一区二区私密| 亚洲在线www| 欧美日韩性生活视频| 久久久久久有精品国产| 国内精品在线一区| 精品亚洲精品福利线在观看| 欧美另类极品videosbestfree| 欧美专区第一页| 国产精品日韩av| 亚洲第一页在线| 欧美激情久久久久| 色哟哟网站入口亚洲精品| 亚洲国产福利在线| 91探花福利精品国产自产在线| 久久噜噜噜精品国产亚洲综合| 欧美成人精品xxx| 最近2019好看的中文字幕免费| 久久亚洲精品毛片| 久久夜色精品国产亚洲aⅴ| 久久久成人av| 精品久久久国产| 亚洲第一区在线观看| 中文字幕日韩欧美在线| 亚洲精品98久久久久久中文字幕| 亚洲欧美在线x视频| 国产精品一区专区欧美日韩| 亚洲欧美精品伊人久久| 亚洲va久久久噜噜噜久久天堂| 亚洲欧洲xxxx| 欧美性猛交xxxx久久久| 日韩亚洲国产中文字幕| 色诱女教师一区二区三区| 国外色69视频在线观看| 2020国产精品视频| 日韩精品丝袜在线| 日本一区二区在线免费播放| 国产亚洲美女久久| 久久躁狠狠躁夜夜爽| 91美女片黄在线观| 一区二区三区视频在线| 国产精品福利网站| 97色在线观看免费视频| 日韩av电影在线播放| 国产欧美日韩亚洲精品| 国产成人精品亚洲精品| 性欧美长视频免费观看不卡| 欧美中文字幕精品| 爽爽爽爽爽爽爽成人免费观看| 欧美激情久久久久| 日韩精品极品视频免费观看| 日韩国产精品视频| 国内精品久久久久久中文字幕| 亚洲91精品在线观看| 91视频免费在线| 亚洲欧洲国产一区| 国产精品视频久久| 国语对白做受69| 欧美成人激情图片网| 亚洲第一网站男人都懂| 亚洲男人天堂2024| 韩国三级电影久久久久久| 丝袜一区二区三区| 色爱av美腿丝袜综合粉嫩av| 精品动漫一区二区| 日韩三级影视基地| 国产精品草莓在线免费观看| 亚洲色图偷窥自拍| 亚洲一区中文字幕在线观看| 亚洲免费一在线| 欧美最猛黑人xxxx黑人猛叫黄| 亚洲激情免费观看| 91视频免费网站| 精品国产91久久久久久老师| 欧美激情国产日韩精品一区18| 欧美日韩国产综合新一区| 欧美精品18videos性欧美| 91色视频在线观看| 操91在线视频| 精品久久久久久国产| 欧美在线观看www| 91午夜在线播放| 国产精品私拍pans大尺度在线| 久久成人一区二区| 精品久久久久久中文字幕大豆网| 亚洲一区国产精品| 久久99久久99精品中文字幕| 欧美日韩亚洲视频| 久久久精品一区二区三区| 国产美女高潮久久白浆| 欧洲美女免费图片一区| 亚洲精品免费av| 亚洲欧美日韩区| 久久久精品免费视频| 欧美多人乱p欧美4p久久| 亚洲日本欧美中文幕| 在线观看亚洲视频| 日韩高清电影好看的电视剧电影| 九九久久精品一区| 国产做受高潮69| 裸体女人亚洲精品一区| 亚洲男人av在线| 日韩精品视频免费专区在线播放| 怡红院精品视频| 综合国产在线观看| 欧美日韩亚洲一区二| 久久中文字幕视频| 国语对白做受69| 欧美一级电影久久| 日韩一区二区福利| 91高清免费视频| xxxxxxxxx欧美| 日韩av免费在线观看| 国产一区二区黄| 欧美精品久久久久久久免费观看| 日韩欧美主播在线| 亚洲国内高清视频| 国产福利精品在线| 亚洲精品电影网站| 日韩精品在线观看网站| 最新亚洲国产精品| 日韩天堂在线视频| 久久天天躁夜夜躁狠狠躁2022| 欧洲成人在线视频| www日韩中文字幕在线看| 丰满岳妇乱一区二区三区| 亚洲综合日韩中文字幕v在线| 久久影视电视剧免费网站| 欧美老女人在线视频| 亚洲欧美中文字幕在线一区| 亚洲日本中文字幕| 中文字幕日韩视频| 欧美日韩国产专区| 亚洲女在线观看| 欧美亚洲视频在线看网址| 国产精品91久久久久久| 欧美区在线播放| 欧美天天综合色影久久精品|