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

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

設計模式中文版

2019-11-18 12:17:59
字體:
來源:轉載
供稿:網友

  第1章 引 言
  
  設計面向對象軟件是較困難,而設計可復用的面向對象軟件就更加困難。你必須找到相
  
  關的對象,以適當的粒度將它們歸類,再定義類的接口和繼續層次,建立對象之間的基本關
  
  系。你的設計應該對手頭的問題有針對性,同時對將來的問題和需求也要有足夠的通用性。
  
  你也希望避免重復設計或盡可能少做重復設計。有經驗的面向對象設計者會告訴你,要一下
  
  子就得到錄用性和靈活性好的設計,即使不是不可能的至少也是非常困難的。一個設計在最
  
  終完成之前常要被亙用好幾次,而且每一次都有所修改。
  
  有經驗的面向對象設計者的確能做出良好的設計,而新手則面對十多選擇無從下手,總
  
  是求助于以前使用過的非面向對象技術。新手需要花費較長時間領會良好的面向對象設計是
  
  怎么回事。有經驗的設計者顯然知道一些新手所不知道的東西,這又是什么呢?
  
  內行的設計者知道:不是解決任何問題都要從頭做起。他們更愿意是用以前使用過的解
  
  決方案。當找到一個好的解決方案,他們會一遍又一遍地使用。這些經驗是他們成為內行的
  
  部分居因。因此,你會在許多面向對象系統中看到類和相互通信的對象(communicating
  
  obect) 的重亙模式。這些模式解決特定的設計問題,便面向對象設計更靈活、優雅,最終亙
  
  用性更好。它們幫助設計者將新的設計建立在以往工作的基礎上,是用以往成功的設計方案。
  
  一個熟悉這些模式的設計者不需要再去發現它們,而能夠立即將它們應用于設計問題中。
  
  以下類仕可以幫助說明這一點。小說家和劇本作家很少從頭開始設計劇情。他們總是沿
  
  襲一些業已存在的模式,像“悲劇性英雄”模式(《麥克白》、《哈姆雷特》等)或“浪漫小說”
  
  模式(存在著無數浪漫小說)。同樣地,面向對象設計員也沿襲一些模式,像“用對象表示狀態”
  
  和“修飾對象以便于你能輕易地添加刪除屬性”等。一旦懂得了模式,許多設計決策自然而
  
  然就產生了。
  
  我們都知道設計經驗的重要價值。你曾經多少次有過這種感覺——你已經解決過了一個問
  
  題但就是不能確切知道是在什么地方或怎么解決的?假如你能記起以前問題的細節和怎么解
  
  決它的,你就可以亙用以前的經驗而不需要重新發現它。然而,我們并沒有很好記錄下可供
  
  他人使用的軟件設計經驗。
  
  這本韋的目的就是將面向對象軟件的設計經驗作為設計模式記錄下來。每一個設計模式
  
  系統地命名、解釋和評價了面向對象系統中一個重要的和重復出現的設計。我們的目標是將
  
  設計經驗以人們能夠有效利用的形式記錄下來。鑒于此目的,我們編寫了一些最重要的設計
  
  模式,并以編目分類的形式將它們展現出來。
  
  設計模式使人們可以更加簡單方便地是用成功的設計和體系結構。將已證實的技十表述
  
  成設計模式也別主新系統開發者更加輕易理解其設計思路。設計模式幫助你做出有利于系統
  
  是用的選擇,避免設計損害了系統是用性。通過提供一個顯式類和對象作用關系以及它們之
  
  間潛在聯系的說明規范,設計模式甚至能夠提高已有系統的文檔治理和系統維護的有效性。
  
  簡而言之,設計模式可以幫助設計者更快更好地完成系統設計。
  
  本韋中涉及的設計模式并不描述新的或未經證實的設計,我們只收錄那些在不同系統中
  
  多次使用過的成功設計。這些設計的絕大部分以往并無文檔記錄,它們或是來源于面向對象
  
  設計看圈子里的非正式交流,或是來源于某些成功的面向對象系統的某些部分,但對設計新
  
  手來說,這些東西是很難學得到的。盡管這些設計不包含新的思路,但我們用一種新的、便
  
  于理解的方式將其展現給讀者,即:具有統一格式的、已分類編目的若干組設計模式。
  
  盡管該韋涉及較多的內容,但韋中討論的設計模式僅僅包含了一個設計行家所知道的部
  
  分。韋中沒有討論與并發或分布式或實時程序設計有關的模式,也沒有收錄面向特定應用領
  
  域的模式。本韋并不預備告訴你怎樣構造用尸界面、怎樣寫設備驅動程序或怎樣使用面向對
  
  象數據庫,這些方面都有自己的模式,將這些模式分類編目也是件很有意義的事。
  
  
  
  什么是設計模式
  
  Christopher Alexander說過:“每一個模式描述了一個在我們四周不斷重復發生的問題,
  
  以及該問題的解決方案的核心。這樣,你就能一次又一次地使用該方案而不必做重亙勞動”
  
  [IS477,第10頁]。盡管Alexander所指的是城市和建筑模式,但他的思想也同樣適用于面向
  
  對象設計模式,只是在面向對象的解決方案里,我們用對象和接口代替了墻壁和門窗。兩類
  
  模式的核心都在于提供了相關問題的解決方案。
  
  一般而言,一個模式有四個基本要素:
  
  1 模式名稱(Patternname)一個助記名,它用一兩個詞來描述模式的問題、解決方案
  
  和效果。命名一個新的模式增加了我們的設計詞匯。設計模式答應我們在較高的抽象層次上
  
  進行設計。基于一個模式詞匯表,我們自己以及同事之間就可以討論模式并在編寫文檔時使
  
  用它們。模式名可以幫助我們思考,便于我們與其他人交流設計思想及設計結果。找到恰當
  
  的模式名也是我們設計模式編目工作的難點之一。
  
  2 問題( PRoblem) 描述了應該在何時使用模式。它解釋了設計問題和問題存在的前因后
  
  果,它可能描述了特定的設計問題,如怎樣用對象表示算法等。也可能描述了導致不靈活設
  
  計的類或對象結構。有B引虞,問題部分會包括使用模式必須滿足的一系列先決條件。
  
  3 解決方案(solution) 描述了設計的組成成分,它們之間的相互關系及苦自的職責和協
  
  作方式。因為模式就像一個模板,可應用于多種不同場合,所以解決方案并不描述一個特定
  
  而具體的設計或實現,而是提供設計問題的抽象描述和怎樣用一個具有一般意義的元素組合
  
  (類或對象組合)來解決這個問題。
  
  4 效果(consequences) 描述了模式應用的效果及使用模式應權衡的問題。盡管我們描述
  
  設計決策時,并不總提到模式效果,但它們對于評價設計選擇和理解使用模式的代價及好處
  
  具有重要意義。軟件效果大多關注對時間和空間的衡量,它們也表述了語言和實現問題。因
  
  為是用是面向對象設計的要素之一,所以模式效果包括它對系統的靈活性、擴充性或可移植
  
  性的影響,顯式地列出這些效果對理解和評價這些模式很有幫助。
  
  出發點的不同會產生對什么是模式和什么不是模式的理解不同。一個人的模式對另一個
  
  人來說可能只是基本構造部件。本韋中我們將在一定的抽象層次上討論模式。《設計模式》并
  
  不描述鏈表和5。sh表那樣的設計,盡管它們可以用類來封裝,也可是用:也不包括那些復雜
  
  的、特定領域內的對整個應用或子系統的設計。本韋中的設計模式是對被用來在特定場景下
  
  解決一般設計問題的類和相二通信的對象的描述。
  
  一個設計模式命名、抽象和確定了一個通用設計結構的主要方面,這些設計結構能被用
  
  來構造可亙用的面向對象設計。設計模式確定了所包含的類和實例,它們的角色、協作方式
  
  以及職責分配。每一個設計模式都集中于一個特定的面向對象設計問題或設計要點,描述了
  
  什么時候使用它,在另一些設計約束條件下是否還能使用,以及使用的效果和如何取舍。既
  
  然我們最終要實現設計,設計模式還提供了C4十和Smalltalk示例代碼來闡明其實現。
  
  雖然設計模式描述的是面向對象設計,但它們都基于實際的解決方案,這些方案的實現
  
  語言是Smalltalk和C十個等主流面向對象編程語言,而不是過程式語言(Pascal、C、Ada)或更具
  
  動態特性的面向對象語言(CLOS、Dylan、Sel幾我們從實用角度出發選擇了Smalltalk和C十十,
  
  因為在這些語言的使用上,我們積累了許多經驗,況且它們也變得越來越流行。
  
  程序設計語言的選擇非常重要,它將影響人們理解問題的出發點。我們的設計模式采用了
  
  Smalltalk和C十個層的語言特性,這個選擇實際上決定了哪些機制可以方便地實現,而哪些則
  
  不能。若我們采用過程式語言,可能就要包括諸如“繼續”、“封裝”和“多態”的設計模式。
  
  相應地,一些非凡的面向對象語言可以亙接支持我們的某些模式,例如:OS支持多方法
  
  (multimethod)概念,這就減少了Vistor模式的必要性。事實上,Smalltalk和C++已有足夠的
  
  差別來說明對某些模式一種語言仕另一種語言表述起來更輕易一些(參見54節Iterator 模式)。
  
  Smalltalk MVC中的設計模式
  
  在Smalltalk-80中,類的模型/視圖/控制器(Model/View/Controller)三元組(MVC)被用來
  
  構建用尸界面。透過M V C來看設計模式將幫助我們理解“模式”這一術語的含義。
  
  MVC包括三類對象。模型Model應用對象

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 金塔县| 武义县| 辛集市| 樟树市| 东方市| 平顺县| 卓尼县| 台中市| 通江县| 通榆县| 伊金霍洛旗| 泽普县| 招远市| 乌兰察布市| 石柱| 常熟市| 临朐县| 福安市| 定安县| 淮滨县| 修水县| 荥经县| 安康市| 海口市| 日照市| 怀仁县| 枞阳县| 常熟市| 衡阳县| 正定县| 凉城县| 项城市| 孟州市| 南岸区| 连山| 崇信县| 湘潭市| 泸西县| 陆丰市| 桦甸市| 百色市|