首頁(yè) 考試吧論壇 Exam8視線 考試商城 網(wǎng)絡(luò)課程 模擬考試 考友錄 實(shí)用文檔 求職招聘 論文下載
2011中考 | 2011高考 | 2012考研 | 考研培訓(xùn) | 在職研 | 自學(xué)考試 | 成人高考 | 法律碩士 | MBA考試
MPA考試 | 中科院
四六級(jí) | 職稱英語(yǔ) | 商務(wù)英語(yǔ) | 公共英語(yǔ) | 托福 | 雅思 | 專四專八 | 口譯筆譯 | 博思 | GRE GMAT
新概念英語(yǔ) | 成人英語(yǔ)三級(jí) | 申碩英語(yǔ) | 攻碩英語(yǔ) | 職稱日語(yǔ) | 日語(yǔ)學(xué)習(xí) | 法語(yǔ) | 德語(yǔ) | 韓語(yǔ)
計(jì)算機(jī)等級(jí)考試 | 軟件水平考試 | 職稱計(jì)算機(jī) | 微軟認(rèn)證 | 思科認(rèn)證 | Oracle認(rèn)證 | Linux認(rèn)證
華為認(rèn)證 | Java認(rèn)證
公務(wù)員 | 報(bào)關(guān)員 | 銀行從業(yè)資格 | 證券從業(yè)資格 | 期貨從業(yè)資格 | 司法考試 | 法律顧問 | 導(dǎo)游資格
報(bào)檢員 | 教師資格 | 社會(huì)工作者 | 外銷員 | 國(guó)際商務(wù)師 | 跟單員 | 單證員 | 物流師 | 價(jià)格鑒證師
人力資源 | 管理咨詢師考試 | 秘書資格 | 心理咨詢師考試 | 出版專業(yè)資格 | 廣告師職業(yè)水平
駕駛員 | 網(wǎng)絡(luò)編輯
衛(wèi)生資格 | 執(zhí)業(yè)醫(yī)師 | 執(zhí)業(yè)藥師 | 執(zhí)業(yè)護(hù)士
會(huì)計(jì)從業(yè)資格考試會(huì)計(jì)證) | 經(jīng)濟(jì)師 | 會(huì)計(jì)職稱 | 注冊(cè)會(huì)計(jì)師 | 審計(jì)師 | 注冊(cè)稅務(wù)師
注冊(cè)資產(chǎn)評(píng)估師 | 高級(jí)會(huì)計(jì)師 | ACCA | 統(tǒng)計(jì)師 | 精算師 | 理財(cái)規(guī)劃師 | 國(guó)際內(nèi)審師
一級(jí)建造師 | 二級(jí)建造師 | 造價(jià)工程師 | 造價(jià)員 | 咨詢工程師 | 監(jiān)理工程師 | 安全工程師
質(zhì)量工程師 | 物業(yè)管理師 | 招標(biāo)師 | 結(jié)構(gòu)工程師 | 建筑師 | 房地產(chǎn)估價(jià)師 | 土地估價(jià)師 | 巖土師
設(shè)備監(jiān)理師 | 房地產(chǎn)經(jīng)紀(jì)人 | 投資項(xiàng)目管理師 | 土地登記代理人 | 環(huán)境影響評(píng)價(jià)師 | 環(huán)保工程師
城市規(guī)劃師 | 公路監(jiān)理師 | 公路造價(jià)師 | 安全評(píng)價(jià)師 | 電氣工程師 | 注冊(cè)測(cè)繪師 | 注冊(cè)計(jì)量師
繽紛校園 | 實(shí)用文檔 | 英語(yǔ)學(xué)習(xí) | 作文大全 | 求職招聘 | 論文下載 | 訪談 | 游戲

2011年計(jì)算機(jī)等考二級(jí)JAVA學(xué)習(xí)精華整理(75)

考試吧整理了2011年計(jì)算機(jī)的等考二級(jí)JAVA學(xué)習(xí)精華,幫助考生備考。

  相關(guān)的設(shè)計(jì)模式有: Bridge、Composite、Decorator、Observer、Strategy等。

  下面的例子演示了這個(gè)規(guī)則,它的前提是:我們對(duì)同一個(gè)數(shù)據(jù)結(jié)構(gòu),需要以任意的格式輸出。

  第一個(gè)例子,我們使用基于繼承的框架,可以看到,它很難維護(hù)和擴(kuò)展。

  abstract class AbstractExampleDocument

  {

  // skip some code ...

  public void output(Example structure)

  {

  if( null != structure )

  {

  this.format( structure );

  }

  }

  protected void format(Example structure);

  }

  第二個(gè)例子,我們使用基于對(duì)象組合技術(shù)的框架,每個(gè)對(duì)象的任務(wù)都清楚的分離開來(lái),我們可以替換、擴(kuò)展格式類,而不用考慮其它的任何事情。

  class DefaultExampleDocument

  {

  // skip some code ...

  public void output(Example structure)

  {

  ExampleFormatter formatter =

  (ExampleFormatter) manager.lookup(Roles.FORMATTER);

  if( null != structure )

  {

  formatter.format(structure);

  }

  }

  }

  這里,用到了類似于"抽象工廠"的組件創(chuàng)建模式,它將組件的創(chuàng)建過(guò)程交給manager來(lái)完成;ExampleFormatter是所有格式的抽象父類;

  將可變的部分和不可變的部分分離

  "將可變的部分和不可變的部分分離"是面向?qū)ο笤O(shè)計(jì)的第三個(gè)原則。如果使用繼承的復(fù)用技術(shù),我們可以在抽象基類中定義好不可變的部分,而由其子類去具體實(shí)現(xiàn)可變的部分,不可變的部分不需要重復(fù)定義,而且便于維護(hù)。如果使用對(duì)象組合的復(fù)用技術(shù),我們可以定義好不可變的部分,而可變的部分可以由不同的組件實(shí)現(xiàn),根據(jù)需要,在運(yùn)行時(shí)動(dòng)態(tài)配置。這樣,我們就有更多的時(shí)間關(guān)注可變的部分。

  對(duì)于對(duì)象組合技術(shù)而言,每個(gè)組件只完成相對(duì)較小的功能,相互之間耦合比較松散,復(fù)用率較高,通過(guò)組合,就能獲得新的功能。

  減少方法的長(zhǎng)度

  通常,我們的方法應(yīng)該只有盡量少的幾行,太長(zhǎng)的方法會(huì)難以理解,而且,如果方法太長(zhǎng),則應(yīng)該重新設(shè)計(jì)。對(duì)此,可以總結(jié)為以下原則:

  ☆ 三十秒原則:如果另一個(gè)程序員無(wú)法在三十秒之內(nèi)了解你的函數(shù)做了什么(What),如何做(How)以及為什么要這樣做(Why),那就說(shuō)明你的代碼是難以維護(hù)的,必須得到提高;

  ☆ 一屏原則:如果一個(gè)函數(shù)的代碼長(zhǎng)度超過(guò)一個(gè)屏幕,那么或許這個(gè)函數(shù)太長(zhǎng)了,應(yīng)該拆分成更小的子函數(shù);

  ☆ 一行代碼盡量簡(jiǎn)短,并且保證一行代碼只做一件事:那種看似技巧性的冗長(zhǎng)代碼只會(huì)增加代碼維護(hù)的難度。

  消除case / if語(yǔ)句

  要盡量避免在代碼中出現(xiàn)判斷語(yǔ)句,來(lái)測(cè)試一個(gè)對(duì)象是否某個(gè)特定類的實(shí)例。通常,如果你需要這么做,那么,重新設(shè)計(jì)可能會(huì)有所幫助。我在工作中遇到這樣的一個(gè)問題:我們?cè)谑褂肑AVA做XML解析時(shí),對(duì)每個(gè)標(biāo)簽映射了一個(gè)JAVA類,采用SAX(簡(jiǎn)單的XML接口API:Simple API for XML)模型。結(jié)果,代碼中反復(fù)出現(xiàn)了大量的判斷語(yǔ)句,來(lái)測(cè)試當(dāng)前的標(biāo)簽類型。為此,我們重新設(shè)計(jì)了DTD(文檔類型定義:Document Type Definition),為每個(gè)標(biāo)簽增加了一個(gè)固定的屬性:classname,而且重新設(shè)計(jì)了每個(gè)標(biāo)簽映射的JAVA類的接口,統(tǒng)一了每個(gè)對(duì)象的操作:

  addElement(Element aElement); //增加子元素

  addAttribute(String attName, String attValue); //增加屬性;

  則徹底消除了所有的測(cè)試當(dāng)前的標(biāo)簽類型的判斷語(yǔ)句。每個(gè)對(duì)象通過(guò) Class.forName(aElement.attributes.getAttribute("classname")).newInstence(); 動(dòng)態(tài)創(chuàng)建,

  減少參數(shù)個(gè)數(shù)

  有大量參數(shù)需要傳遞的方法,通常很難閱讀。我們可以將所有參數(shù)封裝到一個(gè)對(duì)象中來(lái)完成對(duì)象的傳遞,這也有利于錯(cuò)誤跟蹤。

  許多程序員因?yàn),太多層的?duì)象包裝對(duì)系統(tǒng)效率有影響。是的,但是,和它帶來(lái)的好處相比,我們寧愿做包裝。畢竟,"封裝"也是OO的基本特性之一,而且,"每個(gè)對(duì)象完成盡量少(而且簡(jiǎn)單)的功能",也是OO的一個(gè)基本原則。

  類層次的最高層應(yīng)該是抽象類

  在許多情況下,提供一個(gè)抽象基類有利做特性化擴(kuò)展。由于在抽象基類中,大部分的功能和行為已經(jīng)定義好,使我們更容易理解接口設(shè)計(jì)者的意圖是什么。

  由于JAVA不允許"多繼承",從一個(gè)抽象基類繼承,就無(wú)法再?gòu)钠渌惱^承了。所以,提供一個(gè)抽象接口(interface)是個(gè)好主意,一個(gè)類可以實(shí)現(xiàn)多個(gè)接口,從而模擬實(shí)現(xiàn)了"多繼承",為類的設(shè)計(jì)提供了更大的靈活性。

  盡量減少對(duì)變量的直接訪問

  對(duì)數(shù)據(jù)的封裝原則應(yīng)該規(guī)范化,不要把一個(gè)類的屬性暴露給其它類,而是應(yīng)該通過(guò)訪問方法去保護(hù)他們,這有利于避免產(chǎn)生波紋效應(yīng)。如果某個(gè)屬性的名字改變,你只需要修改它的訪問方法,而不是修改所有相關(guān)的代碼。

  子類應(yīng)該特性化,完成特殊功能

  如果一個(gè)子類只是使一個(gè)組件變成組件管理器,而不是實(shí)現(xiàn)接口功能,或者,重載某個(gè)功能,那么,就應(yīng)該使用一個(gè)外部的容器類,而不是創(chuàng)建一個(gè)子類。

  建議:類層次結(jié)構(gòu)圖,不要太深;

  相關(guān)推薦:

  計(jì)算機(jī)等級(jí)考試二級(jí)Java經(jīng)典算法大全匯總

  2010年9月計(jì)算機(jī)等級(jí)考試成績(jī)查詢時(shí)間匯總

   2011計(jì)算機(jī)等級(jí)考試二級(jí)JAVA學(xué)習(xí)精華匯總

文章搜索
版權(quán)聲明:如果計(jì)算機(jī)等級(jí)考試網(wǎng)所轉(zhuǎn)載內(nèi)容不慎侵犯了您的權(quán)益,請(qǐng)與我們聯(lián)系800@exam8.com,我們將會(huì)及時(shí)處理。如轉(zhuǎn)載本計(jì)算機(jī)等級(jí)考試網(wǎng)內(nèi)容,請(qǐng)注明出處。