軟件設(shè)計模式PPT課件_第1頁
軟件設(shè)計模式PPT課件_第2頁
軟件設(shè)計模式PPT課件_第3頁
軟件設(shè)計模式PPT課件_第4頁
軟件設(shè)計模式PPT課件_第5頁
已閱讀5頁,還剩45頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、.,1,軟件設(shè)計模式,Software Design Pattern,.,2,第一講 軟件設(shè)計模式概述,設(shè)計模式的基本概念 軟件危機(jī) 軟件設(shè)計模式的定義 軟件設(shè)計模式的必要性與作用 軟件設(shè)計的基本原則 軟件設(shè)計模式學(xué)習(xí)的前提基礎(chǔ) 軟件設(shè)計模式的主要分類 創(chuàng)建型模式 結(jié)構(gòu)型模式 行為型模式 工廠方法模式,.,3,設(shè)計模式的基本概念-軟件危機(jī),軟件危機(jī)的含義 軟件危機(jī)是指在計算機(jī)軟件的開發(fā)和維護(hù)過程中所遇到的一系列嚴(yán)重問題。這些問題不僅僅是不能正常運(yùn)行的軟件才具有的,實(shí)際上,幾乎所有軟件都不同程度的存在這些問題。軟件危機(jī)包含下屬兩方面的問題:如何開發(fā)軟件,以滿足對軟件日益增長的需求;如何維護(hù)數(shù)量不

2、斷膨脹的已有軟件。,.,4,設(shè)計模式的基本概念-軟件危機(jī),軟件危機(jī)的產(chǎn)生原因 與軟件本身的特點(diǎn)有關(guān)。軟件不同于硬件,它是計算機(jī)系統(tǒng)中的邏輯部件而不是物理部件;軟件不會因使用時間過長而“老化”或“用壞”;在寫出程序代碼并在計算機(jī)上試運(yùn)行之前,軟件開發(fā)過程的進(jìn)展情況較難衡量,軟件質(zhì)量也較難評價,因此管理和控制軟件開發(fā)過程十分困難;軟件質(zhì)量不是根據(jù)大量制造的相同實(shí)體的質(zhì)量來度量,而是與每一個組成部分的不同實(shí)體的質(zhì)量緊密相關(guān),因此,在運(yùn)行時所出現(xiàn)的軟件錯誤幾乎都是在開發(fā)時期就存在而一直未被發(fā)現(xiàn)的,改正這類錯誤通常意味著改正或修改原來的設(shè)計,這就在客觀上使得軟件維護(hù)遠(yuǎn)比硬件維護(hù)困難;軟件是一種信息產(chǎn)品,

3、具有可延展性,屬于柔性生產(chǎn),與通用性強(qiáng)的硬件相比,軟件更具有多樣化的特點(diǎn)。,.,5,設(shè)計模式的基本概念-軟件危機(jī),軟件危機(jī)的產(chǎn)生原因 來自于軟件開發(fā)人員的弱點(diǎn)。其一,軟件產(chǎn)品是人的思維結(jié)果,因此軟件生產(chǎn)水平最終在相當(dāng)程度上取決于軟件人員的教育、訓(xùn)練和經(jīng)驗(yàn)的積累;其二,對于大型軟件往往需要許多人合作開發(fā),甚至要求軟件開發(fā)人員深入應(yīng)用領(lǐng)域的問題研究,這樣就需要在用戶與軟件人員之間以及軟件開發(fā)人員之間相互通訊,在此過程中難免發(fā)生理解的差異,從而導(dǎo)致后續(xù)錯誤的設(shè)計或?qū)崿F(xiàn),而要消除這些誤解和錯誤往往需要付出巨大的代價;其三,由于計算機(jī)技術(shù)和應(yīng)用發(fā)展迅速,知識更新周期加快,軟件開發(fā)人員經(jīng)常處在變化之中,不

4、僅需要適應(yīng)硬件更新的變化,而且還要涉及日益擴(kuò)大的應(yīng)用領(lǐng)域問題研究。,.,6,設(shè)計模式的基本概念-軟件危機(jī),軟件危機(jī) 軟件危機(jī)主要有以下一些典型表現(xiàn):1.對軟件開發(fā)成本和進(jìn)度的估計常常很不準(zhǔn)確。2.用戶對“已完成的”軟件系統(tǒng)不滿意的現(xiàn)象經(jīng)常發(fā)生。3.軟件產(chǎn)品的質(zhì)量往往靠不住。4.軟件常常是不可維護(hù)的。5.軟件通常沒有適當(dāng)?shù)奈臋n資料。6.軟件成本在計算機(jī)系統(tǒng)總成本中所占的比例逐年上升。7.軟件開發(fā)生產(chǎn)率提高的速度,遠(yuǎn)遠(yuǎn)跟不上計算機(jī)應(yīng)用迅速普及深入的趨勢。,.,7,設(shè)計模式的基本概念,模式 設(shè)計模式 軟件設(shè)計模式的必要性與作用 設(shè)計模式的分類,.,8,設(shè)計模式的基本概念,設(shè)計模式的概念最早起源于Ch

5、ristopher Alexander. 每個模式描述了一個在我們的環(huán)境中不斷出現(xiàn)的問題以及該問題解決方案的核心。 通過使用模式,我們可以無限次使用那些已有的解決方案,無需重復(fù)相同的工作。 通用定義: 模式是一種問題的解決思路,它已經(jīng)適用于一種實(shí)踐環(huán)境,并可以使用于其他環(huán)境。,.,9,設(shè)計模式的基本概念-生活中的模式,古人在遇到生活問題時,能通過不斷的思考、實(shí)踐、總結(jié),最后得到許多解決生活困難的方法。 后人遇到相同問題的時候,也會采用同樣的方法,這些方法就被稱為模式。 烤肉-取火 取水-打井 耕田-耕牛,.,10,設(shè)計模式的基本概念-設(shè)計模式,所謂設(shè)計模式是對于某一類軟件設(shè)計問題的可重用的解決

6、方案。 設(shè)計模式的最終目標(biāo)就是幫助人們利用成功軟件設(shè)計師們的集體經(jīng)驗(yàn),來設(shè)計出更加優(yōu)秀的軟件,解決軟件危機(jī)的問題。 引入軟件設(shè)計模式將成為企業(yè)或者個人可持續(xù)發(fā)展的必然選擇。只有專業(yè),才能在這個領(lǐng)域做得最好,為社會、企業(yè)和個人帶來更多的價值,.,11,設(shè)計模式的基本概念-設(shè)計模式的特點(diǎn),設(shè)計模式的特點(diǎn) 名稱 每個設(shè)計模式都有一個名稱。 可傳授性 問題反復(fù)出現(xiàn),解決問題的方案相同,大家都接受改方案。 可重用性 問題反復(fù)出現(xiàn),盡管問題出現(xiàn)的 環(huán)境有不同,但解決方案都應(yīng)該有效。,.,12,設(shè)計模式的基本概念-設(shè)計模式的必要性與作用,重用設(shè)計 重用設(shè)計比重用代碼更有意義,它會自動帶來代碼重 用; 為設(shè)計

7、提供共同的詞匯 每個模式名就是一個設(shè)計詞匯,其概念使得程序員間的交流更加 方便;編寫開發(fā)文檔更加容易; 重構(gòu)系統(tǒng)更加容易 設(shè)計模式從最初的設(shè)計就考慮到變化,因此當(dāng)需求發(fā)生變化時,一般不會改變整體設(shè)計; 節(jié)約設(shè)計時間 可采用任何編程語言實(shí)現(xiàn),.,13,設(shè)計模式的基本概念-設(shè)計模式基本原則,高內(nèi)聚、低耦合 一個軟件系統(tǒng)要有一個穩(wěn)定的架構(gòu),不會隨需求的改變而發(fā)生巨大的變動。因此,高內(nèi)聚、低耦合是一個軟件系統(tǒng)設(shè)計中必須遵循的基本原則。 面向抽象編程 在面向過程的軟件開發(fā)中,上層組件調(diào)用下層組件,就意味著上層組件依賴于下層組件,當(dāng)下層組件發(fā)生劇烈變化時,上層組件也要跟著一起發(fā)生變動,這將導(dǎo)致軟件組件模塊

8、的復(fù)用性大大降低,從而增加軟件開發(fā)成本,使軟件結(jié)構(gòu)設(shè)計上存在一定的臃腫性,不利于后期系統(tǒng)維護(hù)工作。 多用組合少用繼承 在面向?qū)ο蟮能浖O(shè)計中,對于類的擴(kuò)展,首先想到的是使用類的繼承來實(shí)現(xiàn),由子類繼承父類,從而完成對子類功能的擴(kuò)展。繼承的好處是可以盡量讓相同的屬性或者功能復(fù)用,但是隨著項(xiàng)目越來越大,需求的不斷變化,繼承就會變得越來越臃腫,后期難以控制和維護(hù)。最重要的是,繼承會不分青紅皂白地把父類的公有和受保護(hù)的方法統(tǒng)統(tǒng)繼承下來,而這些方法可能是子類不需要的功能,會對子類產(chǎn)生一些危害。 “開-閉”原則,即“對擴(kuò)展開放,對修改關(guān)閉”,.,14,設(shè)計模式的基本概念-設(shè)計模式的分類,目前設(shè)計模式可以分為

9、兩大類: GOF(Gang of Four) GOF 是由四位(Erich GAMMA, Richarc Helm, Ralph Johnson, John Vlissides) 具有豐富的面向?qū)ο笤O(shè)計經(jīng)驗(yàn)的大師給出的,所以被稱為“四人幫”模式; GOF設(shè)計模式常用的有23種; 著重考慮設(shè)計的實(shí)現(xiàn),類的交互和軟件的質(zhì)量; GRASP(General Responsibility Assignment Software Patterns) 通用責(zé)任分配挼建設(shè)計模式; 著重考慮設(shè)計類的原則以及如何分配類的功能; GOF是遵循GRASP模式要求的面向?qū)ο笤O(shè)計模式,.,15,設(shè)計模式的基本概念-設(shè)計模

10、式的分類,GOF設(shè)計模式分類可基于兩種準(zhǔn)則: 根據(jù)模式的目的,也就是根據(jù)模式是用來完成什么工作 Creational(創(chuàng)建型) Structural(結(jié)構(gòu)型) Behavioral(行為型) 根據(jù)模式的范圍,模式是針對類還是對象 類模式; 對象模式;,.,16,設(shè)計模式的基本概念-設(shè)計模式的分類,.,17,設(shè)計模式學(xué)習(xí)的前提基礎(chǔ),至少掌握一種面向?qū)ο蟪绦蛟O(shè)計語言 具有面向?qū)ο蟪绦蛟O(shè)計的基本概念 掌握UML(Unified Modelling Language) 實(shí)踐是需要理論知識積累的。要想正確應(yīng)用各種設(shè)計模式,首先需要學(xué)習(xí)設(shè)計模式,掌握設(shè)計模式的實(shí)現(xiàn)要點(diǎn),最重要的是在學(xué)習(xí)設(shè)計模式當(dāng)中掌握軟件

11、設(shè)計原則。設(shè)計模式是前人的實(shí)踐經(jīng)驗(yàn)總結(jié)出來的,具有固定的實(shí)現(xiàn)方式,但是設(shè)計原則是活的,是需要我們認(rèn)真體會和領(lǐng)悟的。,.,18,創(chuàng)建型模式之一(工廠方法模式),名稱:工廠方法模式(Factory method pattern) 或工廠模式(Factory pattern) 或 虛構(gòu)造器(Virtual Constructor) 設(shè)計:父類負(fù)責(zé)定義創(chuàng)建對象的公共接口,子類則負(fù)責(zé)生成具體的對象。 意圖:將類的實(shí)例化操作延遲到子類中完成,由子類來決定究竟該實(shí)例化(創(chuàng)建)哪一個類。,.,19,創(chuàng)建型模式之一(工廠方法模式),所謂工廠方法模式(Factory Method Pattern),就是定義一個創(chuàng)

12、建產(chǎn)品對象的工廠接口,讓子類決定實(shí)例化哪一種實(shí)例對象,也就是將實(shí)際創(chuàng)建實(shí)例對象的工作推遲到子類當(dāng)中,核心工廠類不再負(fù)責(zé)具體產(chǎn)品的創(chuàng)建。,.,20,創(chuàng)建型模式之一(工廠方法模式),.,21,創(chuàng)建型模式之一(工廠方法模式),.,22,創(chuàng)建型模式之一(工廠方法模式),工廠方法時序圖,.,23,創(chuàng)建型模式之一(工廠方法模式),實(shí)例一(兵工廠),.,24,創(chuàng)建型模式之一(工廠方法模式),實(shí)例一(兵工廠),.,25,創(chuàng)建型模式之一(工廠方法模式),實(shí)例二(多文檔),.,26,接口的作用,接口的定義方面來說,接口其實(shí)就是類和類之間的一種協(xié)定,一種約束(安全性). 方便統(tǒng)一管理.另一個是方便調(diào)用 提高模塊內(nèi)的

13、內(nèi)聚性,降低模塊間的耦合性. 擴(kuò)展性 使用方便,可讀性強(qiáng),結(jié)構(gòu)清晰的特點(diǎn)。 interface IBark void Bark(); class Dog implement IBark public Dog() public void Bark() System.out.println(汪汪); ,.,27,抽象類和接口的區(qū)別,abstract class 在 Java 語言中表示的是一種繼承關(guān)系,一個類只能使用一次繼承關(guān)系。但是,一個類卻可以實(shí)現(xiàn)多個interface。 abstract class 中可以有自己的數(shù)據(jù)成員,也可以有非abstarct的成員方法,而在interface中,只能

14、夠有靜態(tài)的不能被修改的數(shù)據(jù)成員(也就是必須是static final的,不過在 interface中一般不定義數(shù)據(jù)成員),所有的成員方法都是abstract的。 abstract class和interface所反映出的設(shè)計理念不同。其實(shí)abstract class表示的是is-a關(guān)系,interface表示的是like-a關(guān)系。 實(shí)現(xiàn)抽象類和接口的類必須實(shí)現(xiàn)其中的所有方法。抽象類中可以有非抽象方法。接口中則不能有實(shí)現(xiàn)方法。 接口中定義的變量默認(rèn)是public static final 型,且必須給其初值,所以實(shí)現(xiàn)類中不能重新定義,也不能改變其值。 抽象類中的變量默認(rèn)是 friendly 型,

15、其值可以在子類中重新定義,也可以重新賦值。 接口中的方法默認(rèn)都是 public,abstract 類型的。,.,28,創(chuàng)建型模式之一(工廠方法模式),實(shí)例二(多文檔),.,29,創(chuàng)建型模式之一(工廠方法模式),實(shí)例二(多文檔),.,30,創(chuàng)建型模式之一(工廠方法模式),實(shí)例二(多文檔),.,31,創(chuàng)建型模式之一(工廠方法模式),實(shí)例二(多文檔),.,32,創(chuàng)建型模式之一(工廠方法模式),實(shí)例二(多文檔),.,33,創(chuàng)建型模式之一(工廠方法模式),實(shí)例三(手機(jī)工廠),.,34,創(chuàng)建型模式之一(工廠方法模式),實(shí)例三(手機(jī)工廠),.,35,創(chuàng)建型模式之一(工廠方法模式),實(shí)例三(手機(jī)工廠),.,3

16、6,創(chuàng)建型模式之一(工廠方法模式),實(shí)例三(手機(jī)工廠),.,37,創(chuàng)建型模式之一(工廠方法模式,故事中的工廠方法模式 我們看一下故事中出現(xiàn)的人物和事物各自對應(yīng)工廠方法設(shè)計模式的哪些部件,如下所示: 大司徒王允寶刀工廠(負(fù)責(zé)提供寶刀) 校尉曹操獲得七星寶刀的具體工廠 七星寶刀具體產(chǎn)品(寶刀中的一類),.,38,創(chuàng)建型模式之一(工廠方法模式,其實(shí)我們可以再抽象化一點(diǎn):大司徒王允擁有很多寶刀,而七星寶刀是其中最好、最鋒利的一把,曹操獲得的就是這把最鋒利的七星寶刀。OK!我們已經(jīng)使用了抽象的概念了!,.,39,創(chuàng)建型模式之一(工廠方法模式,建立產(chǎn)品 1抽象寶刀AbstractSword 2具體寶刀Qi

17、xingSword七星寶刀 建立工廠 1抽象寶刀工廠ISwordFactory 生產(chǎn)抽象寶刀 2具體寶刀工廠Caocao 生產(chǎn)七星寶刀 故事情節(jié)的歷史重現(xiàn) 用八星寶刀來考驗(yàn)?zāi)J?1創(chuàng)建八星寶刀BaxingSword 2創(chuàng)建具體寶刀工廠Caocao2 生產(chǎn)八星寶刀 3讓曹操使用八星寶刀刺殺董卓,.,40,創(chuàng)建型模式之一(工廠方法模式),.,41,創(chuàng)建型模式之一(工廠方法模式),.,42,創(chuàng)建型模式之一(工廠方法模式),package com.demo.factory.itf; import com.demo.factory.model.AbstractSword; /* * 寶刀工廠 * * a

18、uthor Administrator * */ public interface ISwordFactory /* * 生產(chǎn)各類寶刀(返回值是抽象寶刀類型) * * return */ public AbstractSword createSword(); ,.,43,創(chuàng)建型模式之一(工廠方法模式),package com.demo.factory; import com.demo.factory.itf.ISwordFactory; import com.demo.factory.model.AbstractSword; import com.demo.factory.model.obje

19、ct.QixingSword; /* * 具體工廠曹操 * * author * */ public class Caocao implements ISwordFactory /* *實(shí)現(xiàn)ISwordFactory接口的createSword方法生產(chǎn)七星寶島 */ public AbstractSword createSword() return new QixingSword(); ,.,44,創(chuàng)建型模式之一(工廠方法模式),package com.demo.factory.model; /* * 定義抽象寶刀 * * author Administrator * */ public ab

20、stract class AbstractSword / 寶刀的名稱 private String name; public AbstractSword() / 獲得寶刀名稱 public String getName() return name; / 設(shè)置寶刀名稱 public void setName(String name) = name; ,.,45,創(chuàng)建型模式之一(工廠方法模式),package com.demo.factory.model.object; import com.demo.factory.model.AbstractSword; /* * 七星寶刀

21、類 * * author * */ public class QixingSword extends AbstractSword /* * 構(gòu)造方法設(shè)置寶刀名稱 */ public QixingSword() this.setName(七星寶刀); ,.,46,創(chuàng)建型模式之一(工廠方法模式),package com.demo; import java.util.HashMap; import java.util.Map; import com.demo.factory.Caocao2; import com.demo.factory.itf.ISwordFactory; import com.demo.facto

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論