




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、-2-從問題開始!從問題開始!n長方形與正方形長方形與正方形n假如我們有一個類:長方形(假如我們有一個類:長方形(Rectangle)n我們需要一個新的類,正方形(我們需要一個新的類,正方形(Square)n問:可否直接繼承長方形?問:可否直接繼承長方形?-3-開始設(shè)計:正方形開始設(shè)計:正方形-4-設(shè)計方案正確嗎?設(shè)計方案正確嗎?-5-為什么會出現(xiàn)問題?為什么會出現(xiàn)問題?-6-面向?qū)ο蟮脑O(shè)計原則面向?qū)ο蟮脑O(shè)計原則n什么是面向?qū)ο笤O(shè)計原則?什么是面向?qū)ο笤O(shè)計原則?n面向?qū)ο笤O(shè)計原則有什么意義?面向?qū)ο笤O(shè)計原則有什么意義?n是指導(dǎo)面向?qū)ο笤O(shè)計的基本指導(dǎo)思想是指導(dǎo)面向?qū)ο笤O(shè)計的基本指導(dǎo)思想n是評價面
2、向?qū)ο笤O(shè)計的價值觀體系是評價面向?qū)ο笤O(shè)計的價值觀體系n是設(shè)計模式的出發(fā)點和歸宿是設(shè)計模式的出發(fā)點和歸宿-7-設(shè)計目標(biāo)設(shè)計目標(biāo)n設(shè)計目標(biāo)設(shè)計目標(biāo)n可擴展性可擴展性 (Extensibility)n靈活性靈活性 (Flexibility)n可插入性可插入性 (Pluggability)n-8-設(shè)計質(zhì)量:好的設(shè)計設(shè)計質(zhì)量:好的設(shè)計n什么是好的設(shè)計?什么是好的設(shè)計?n容易理解容易理解n容易修改和擴展容易修改和擴展n容易復(fù)用容易復(fù)用n容易實現(xiàn)與應(yīng)用容易實現(xiàn)與應(yīng)用n簡單、緊湊、經(jīng)濟適用簡單、緊湊、經(jīng)濟適用n讓人工作起來心情愉快的設(shè)計讓人工作起來心情愉快的設(shè)計-9-面向?qū)ο蟮幕驹O(shè)計原則面向?qū)ο蟮幕驹O(shè)計原
3、則nSRP:單一職責(zé)原則:單一職責(zé)原則nThe Single Responsibility PrinciplenOCP:開放:開放-封閉原則封閉原則nThe Open-Close PrinciplenLSP:Liskov替換原則替換原則nThe Liskov Substitution PrinciplenISP:接口隔離原則:接口隔離原則nThe Interface Segregation Principle nDIP:依賴倒置原則:依賴倒置原則nThe Dependency Inversion Principlen-10-SRPnSRP(The Single Responsibility P
4、rinciple, 單一職責(zé)原則)單一職責(zé)原則)n就一個類而言,應(yīng)該僅有一個引起它變化的原因就一個類而言,應(yīng)該僅有一個引起它變化的原因n有關(guān)類的職責(zé)分配問題,是面向?qū)ο笤O(shè)計中最有關(guān)類的職責(zé)分配問題,是面向?qū)ο笤O(shè)計中最重要的基本原則重要的基本原則“A critical, fundamental ability in OOA/D is to skillfully assign responsibility to software components.” Craig Larman-11-SRP本質(zhì)本質(zhì)nSRP體現(xiàn)了內(nèi)聚性(體現(xiàn)了內(nèi)聚性(Cohesion)n內(nèi)聚性:一個模塊的組成元素之間的功能相內(nèi)聚
5、性:一個模塊的組成元素之間的功能相關(guān)性關(guān)性n類的職責(zé)定義為類的職責(zé)定義為“變化的原因變化的原因”,每個,每個職責(zé)都是變化的一個軸線;職責(zé)都是變化的一個軸線;n當(dāng)需求變化時,該變化會反映為類的職責(zé)的當(dāng)需求變化時,該變化會反映為類的職責(zé)的變化變化n如果一個類承擔(dān)了多于一個的職責(zé),那么引如果一個類承擔(dān)了多于一個的職責(zé),那么引起它變化的原因就會有多個起它變化的原因就會有多個-12-違反違反SRP的案例的案例Rectangle類可能會因為兩方面的原因而變化:計算幾類可能會因為兩方面的原因而變化:計算幾何方面的原因和用戶界面設(shè)計方面的原因。其中只一發(fā)何方面的原因和用戶界面設(shè)計方面的原因。其中只一發(fā)生變化之
6、后,必須修改生變化之后,必須修改Rectangle類,而這種修改則可類,而這種修改則可能導(dǎo)致另一個應(yīng)用程序出錯能導(dǎo)致另一個應(yīng)用程序出錯除此之外,違反除此之外,違反SRP還會帶來物理依賴的缺點。還會帶來物理依賴的缺點。-13-解決方案解決方案增加新的類,使得每個類僅有一個職責(zé)增加新的類,使得每個類僅有一個職責(zé)-14-單一職責(zé)原則單一職責(zé)原則l下面這個類的設(shè)計是否合理?-15-單一職責(zé)原則單一職責(zé)原則l這個類處理的事情太多l(xiāng)計算薪水l計算稅費l在磁盤上讀寫他們自己l如何將它們轉(zhuǎn)化成XML或逆向轉(zhuǎn)化l如何用不同的報表打印l這意味著:從SAX改為JDOM、將數(shù)據(jù)庫從Access變成Oracle、改變稅
7、費報表的格式,都得改變Employee類-16-單一職責(zé)原則單一職責(zé)原則-17-LSPnLSP(The Liskov Substitution Principle, Liskov替換原則)替換原則) n“若對于類型若對于類型S的任一對象的任一對象o1,均有類型,均有類型T的對象的對象o2存在,使得在存在,使得在T定義的所有程序定義的所有程序P中,用中,用o1替換替換o2之之后,程序的行為不變,則后,程序的行為不變,則S是是T的子類型的子類型”n如果在任何情況下,子類(或子類型)或?qū)崿F(xiàn)類與如果在任何情況下,子類(或子類型)或?qū)崿F(xiàn)類與基類都是可以互換的,那么繼承的使用就是合適的?;惗际强梢曰Q的
8、,那么繼承的使用就是合適的。為了達(dá)到這一目標(biāo),為了達(dá)到這一目標(biāo),n“”-18-違背違背LSP原則原則-19-怎么辦?怎么辦?ABABC-20-抽象類與具體類抽象類與具體類具體類3具體類3抽象類1抽象類1抽象類2抽象類2具體類1具體類1抽象類3抽象類3具體類2具體類2-21-解決方案解決方案-22-IS-A關(guān)系的思考?關(guān)系的思考?n鴕鳥是鳥嗎?是鴕鳥是鳥嗎?是n鴕鳥有翅膀,鳥也有翅膀鴕鳥有翅膀,鳥也有翅膀n鴕鳥有喙,鳥也有喙鴕鳥有喙,鳥也有喙n但是但是n鳥鳥.getFlySpeed()n鴕鳥鴕鳥.getRunSpeed()n有著不同有著不同-23-IS-A關(guān)系的思考關(guān)系的思考(續(xù)續(xù))n對于動物學(xué)
9、家對于動物學(xué)家n只關(guān)心鳥的生理特征,對他們來說,鴕鳥就只關(guān)心鳥的生理特征,對他們來說,鴕鳥就是鳥是鳥n 對于養(yǎng)鳥人對于養(yǎng)鳥人n關(guān)心鳥的行為特征,鴕鳥不是鳥關(guān)心鳥的行為特征,鴕鳥不是鳥n 他們都正確他們都正確n考慮一個特定設(shè)計是否恰當(dāng)時,不能完考慮一個特定設(shè)計是否恰當(dāng)時,不能完全孤立地看這個解決方案,應(yīng)該根據(jù)設(shè)全孤立地看這個解決方案,應(yīng)該根據(jù)設(shè)計的使用者提出的合理假設(shè)來審視計的使用者提出的合理假設(shè)來審視-24-OCPnOCP(The Open-Close Principle, 開放開放-封閉原則)封閉原則)n軟件實體(類、模塊、函數(shù)等)應(yīng)該是可擴軟件實體(類、模塊、函數(shù)等)應(yīng)該是可擴展的,但是不
10、可修改的展的,但是不可修改的n特征:特征:n對于擴展是開放的(對于擴展是開放的(Open for extension)n模塊的行為可以擴展,當(dāng)應(yīng)用的需求改變時,可以對模模塊的行為可以擴展,當(dāng)應(yīng)用的需求改變時,可以對模塊進行擴展,以滿足新的需求塊進行擴展,以滿足新的需求n對于更改是封閉的(對于更改是封閉的(Closed for modification)n對模塊行為擴展時,不必改動模塊的源代碼或二進制代對模塊行為擴展時,不必改動模塊的源代碼或二進制代碼碼-25-OCP的關(guān)鍵在于抽象的關(guān)鍵在于抽象nOCP的關(guān)鍵在于抽象的關(guān)鍵在于抽象n抽象技術(shù):抽象技術(shù):abstract class, Interf
11、acen抽象預(yù)見了可能的所有擴展(閉)抽象預(yù)見了可能的所有擴展(閉)n由抽象可以隨時導(dǎo)出新的類(開)由抽象可以隨時導(dǎo)出新的類(開)ClientServerServerClient InterfaceClient-26-范例:手與門范例:手與門n如何在程序中模擬用手去開門和關(guān)門?如何在程序中模擬用手去開門和關(guān)門?n行為:行為:n開門(開門(open)n關(guān)門(關(guān)門(close)n判斷門的狀態(tài)(判斷門的狀態(tài)(isOpened)-27-設(shè)計實現(xiàn)設(shè)計實現(xiàn)-28-新的需求新的需求-29-解決新的需求:修改設(shè)計解決新的需求:修改設(shè)計-30-符合符合OCP的設(shè)計方案的設(shè)計方案-31-新的實現(xiàn)新的實現(xiàn)-32-新
12、的需求新的需求-33-關(guān)于關(guān)于OCPnOCP是是OOD中很多說法的核心中很多說法的核心n如果這個原則應(yīng)用得有效,應(yīng)用程序就會具如果這個原則應(yīng)用得有效,應(yīng)用程序就會具有更多的可維護性、可重用性以及可健壯性有更多的可維護性、可重用性以及可健壯性nLSP是是OCP成為可能的主要原則之一成為可能的主要原則之一n正是子類型的可替換性才使得使用基類類型正是子類型的可替換性才使得使用基類類型的模塊在無需修改的情況下就可以擴展的模塊在無需修改的情況下就可以擴展-34-ISPnISP( The Interface Segregation Principle,接口隔離原則),接口隔離原則)n客戶不應(yīng)該依賴他們不用
13、到的方法,只給每客戶不應(yīng)該依賴他們不用到的方法,只給每個客戶它所需要的接口個客戶它所需要的接口n為了避免為了避免“肥接口肥接口(fat interface)”,應(yīng)當(dāng),應(yīng)當(dāng)以一個類實現(xiàn)多個接口,而各客戶僅僅獲知以一個類實現(xiàn)多個接口,而各客戶僅僅獲知必須的接口必須的接口-35-接口污染接口污染n需求:一扇能超時報警的門需求:一扇能超時報警的門nDoornOpen()nClose()n當(dāng)需要其它的門時習(xí)慣性從當(dāng)需要其它的門時習(xí)慣性從Door中繼承中繼承n問題在哪兒?問題在哪兒?n所有的門都擁有所有的門都擁有timeout接口,即便它不需接口,即便它不需要要-36-解決方案:分離接口解決方案:分離接口
14、n使用委托分離接口使用委托分離接口nAdapter模式模式n使用多重繼承分離接口使用多重繼承分離接口-37-ISP本質(zhì)本質(zhì)n使用多個專門的接口比使用單一的接口使用多個專門的接口比使用單一的接口好好n一個類對另一個類的依賴性應(yīng)當(dāng)是建立一個類對另一個類的依賴性應(yīng)當(dāng)是建立在最小的接口上的在最小的接口上的n避免接口污染(避免接口污染(Interface Pollution)-38-DIPnDIP(依賴倒置原則,(依賴倒置原則,The Dependency Inversion Principle)n高層模塊不應(yīng)該依賴于低層模塊。二者都應(yīng)該依賴高層模塊不應(yīng)該依賴于低層模塊。二者都應(yīng)該依賴于抽象于抽象n抽象
15、不應(yīng)該依賴于細(xì)節(jié)。細(xì)節(jié)應(yīng)該依賴于抽象抽象不應(yīng)該依賴于細(xì)節(jié)。細(xì)節(jié)應(yīng)該依賴于抽象n針對接口編程,不要針對實現(xiàn)編程針對接口編程,不要針對實現(xiàn)編程nBooch:所有結(jié)構(gòu)良好的面向?qū)ο蠹軜?gòu)都具有:所有結(jié)構(gòu)良好的面向?qū)ο蠹軜?gòu)都具有清晰的層次定義,每個層次通過一個定義良好清晰的層次定義,每個層次通過一個定義良好的、受控的接口向外提供了一組內(nèi)聚的服務(wù)的、受控的接口向外提供了一組內(nèi)聚的服務(wù)-39-傳統(tǒng)的依賴關(guān)系傳統(tǒng)的依賴關(guān)系依依賴賴的的方方向向高級商業(yè)邏輯中層模塊中層模塊中層模塊底層模塊底層模塊底層模塊底層模塊底層模塊-40-符合符合DIP的系統(tǒng)的系統(tǒng)依依賴賴的的方方向向依依賴賴的的方方向向高級商業(yè)邏輯抽象層抽
16、象層抽象層實現(xiàn)層實現(xiàn)層實現(xiàn)層實現(xiàn)層實現(xiàn)層-41-啟發(fā)式原則啟發(fā)式原則n“依賴于抽象依賴于抽象”程序中所有依賴關(guān)系程序中所有依賴關(guān)系都應(yīng)該終止于抽象類或者接口都應(yīng)該終止于抽象類或者接口n啟發(fā)式原則:啟發(fā)式原則:n任何變量都不應(yīng)該擁有指向具體類的指針或任何變量都不應(yīng)該擁有指向具體類的指針或者引用者引用n任何類都不應(yīng)該從具體類派生任何類都不應(yīng)該從具體類派生n任何方法都不應(yīng)該改寫其任何基類中已經(jīng)實任何方法都不應(yīng)該改寫其任何基類中已經(jīng)實現(xiàn)的方法現(xiàn)的方法-42-總結(jié)總結(jié)n單一責(zé)任原則單一責(zé)任原則(SRP)n一個類只有一個引起變化的原因一個類只有一個引起變化的原因n“開開-閉閉”原則原則(OCP)n對可變性
17、封裝對可變性封裝n里氏替換原則里氏替換原則(LSP)n如何進行繼承如何進行繼承n依賴倒置原則依賴倒置原則(DIP)n針對接口編程針對接口編程n接口隔離原則接口隔離原則(ISP)n恰當(dāng)?shù)膭澐纸涌诤徒巧‘?dāng)?shù)膭澐纸涌诤徒巧?44-設(shè)計?設(shè)計?-45-設(shè)計模式?設(shè)計模式?-46-設(shè)計模式設(shè)計模式n什么是設(shè)計模式?什么是設(shè)計模式?n設(shè)計就是解決方案設(shè)計就是解決方案對對的解決的解決n如果某個解決方案對如果某個解決方案對都很有用都很有用n這時就把它總結(jié)出來這時就把它總結(jié)出來n這就產(chǎn)生了設(shè)計模式這就產(chǎn)生了設(shè)計模式-47-設(shè)計模式的基本要素設(shè)計模式的基本要素n1. 名稱:用于助記,形象表示這個模式名稱:用于助
18、記,形象表示這個模式n2. 問題:這個模式可以解決什么問題問題:這個模式可以解決什么問題n3. 解決方案:這個模式怎樣解決這個問解決方案:這個模式怎樣解決這個問題的步驟與方法題的步驟與方法n4. 效果:使用這個模式與不使用這個模效果:使用這個模式與不使用這個模式有什么區(qū)別,它有什么優(yōu)點和缺點式有什么區(qū)別,它有什么優(yōu)點和缺點 -48-經(jīng)典設(shè)計模式:經(jīng)典設(shè)計模式:GoFFactory MethodAdapter_ClassInterpreterTemplate MethodAbstract FactoryBuilderPrototypeSingletonAdapter_ObjectBridgeCo
19、mpositeDecoratorFacadeFlyweightProxyChain of ResponsibilityCommandIteratorMediatorMementoObserverStateStrategyVisitor-49-設(shè)計模式舉例設(shè)計模式舉例nObserver模式模式nsingleton模式模式nFactory模式模式n-50-觀察者模式(觀察者模式(Observer)n觀察者模式定義了一個一對多的依賴關(guān)觀察者模式定義了一個一對多的依賴關(guān)系,讓一個或多個系,讓一個或多個觀察者對象觀察者對象監(jiān)察一個監(jiān)察一個主題對象主題對象。n這樣一個主題對象在狀態(tài)上的變化能夠這樣一個主題
20、對象在狀態(tài)上的變化能夠通知所有的依賴于此對象的那些觀察者通知所有的依賴于此對象的那些觀察者對象,使這些觀察者對象能夠自動更新。對象,使這些觀察者對象能夠自動更新。 -51-觀察者模式類圖觀察者模式類圖 -52-抽象主題(抽象主題(Subject)角色角色 n主題角色把所有的觀察者主題角色把所有的觀察者對象的引用保存在一個列對象的引用保存在一個列表里;每個主題都可以有表里;每個主題都可以有任何數(shù)量的觀察者。任何數(shù)量的觀察者。n主題提供一個接口可以加主題提供一個接口可以加上或撤銷觀察者對象;主上或撤銷觀察者對象;主題角色又叫做抽象被觀察題角色又叫做抽象被觀察者者(Observable)角色。角色。
21、 -53-具體主題(具體主題(ConcreteSubject)角色角色 n保存對具體觀察者保存對具體觀察者對象有用的內(nèi)部狀對象有用的內(nèi)部狀態(tài);態(tài);n在這種內(nèi)部狀態(tài)改在這種內(nèi)部狀態(tài)改變時給其觀察者發(fā)變時給其觀察者發(fā)出一個通知;出一個通知;n具體主題角色又叫具體主題角色又叫作具體被觀察者角作具體被觀察者角色;色; -54-具體觀察者(具體觀察者(ConcreteObserver)角色角色n保存一個指向具體保存一個指向具體主題對象的引用;主題對象的引用;n具體觀察者角色實具體觀察者角色實現(xiàn)抽象觀察者角色現(xiàn)抽象觀察者角色所要求的更新自己所要求的更新自己的接口,以便使本的接口,以便使本身的狀態(tài)與主題的身
22、的狀態(tài)與主題的狀態(tài)自恰。狀態(tài)自恰。-55-觀察者模式在觀察者模式在Java中中n從從AWT1.1AWT1.1開始視窗系統(tǒng)的事件模型采用開始視窗系統(tǒng)的事件模型采用觀察者模式,因此觀察者模式在觀察者模式,因此觀察者模式在JavaJava語語言里的地位較為重要。言里的地位較為重要。n在在JavaJava語言的語言的java.utiljava.util庫里面,提供了庫里面,提供了一個一個ObservableObservable類以及一個類以及一個ObserverObserver接接口,構(gòu)成口,構(gòu)成JavaJava語言對觀察者模式的支持。語言對觀察者模式的支持。 -56-Java觀察者模式類圖觀察者模式
23、類圖-57-Observable類類 n被觀察者類都是被觀察者類都是java.util.Observable類類的子類的子類 -58-Observer接口接口npackage java.util;public interface Observer /* 當(dāng)被觀察的對象發(fā)生變化時,這個方法會被調(diào)用。當(dāng)被觀察的對象發(fā)生變化時,這個方法會被調(diào)用。*/ void update(Observable o, Object arg);-59-舉例舉例import java.awt.*;import java.applet.*;import java.awt.event.*;public class MyFi
24、rstApplet extends AppletTextField field1;Button okButton;public void init() field1 = new TextField(20); okButton = new Button(“確定); this.add(field1); this.add(okButton); MyListener listener = new MyListener(); okButton.addActionListener(listener); class MyListener implements ActionListener public vo
25、id actionPerformed(ActionEvent e) String label = okButton.getLabel();field1.setText(label); 點擊按鈕-60-單態(tài)模式單態(tài)模式(singleton) n一個單態(tài)類只可有一個實例。這樣的類一個單態(tài)類只可有一個實例。這樣的類常用來進行資源管理。常用來進行資源管理。 n例如:很多軟件都有數(shù)據(jù)庫,一般而言,例如:很多軟件都有數(shù)據(jù)庫,一般而言, 整個軟件應(yīng)當(dāng)使用一個聯(lián)接通道,而不整個軟件應(yīng)當(dāng)使用一個聯(lián)接通道,而不是任意在需要時就新打開一個聯(lián)接通道。是任意在需要時就新打開一個聯(lián)接通道。 -61-單態(tài)類的特性單態(tài)類的特
26、性 n1、單態(tài)類只可有一個實例。、單態(tài)類只可有一個實例。 2、它必須自己創(chuàng)立自己這唯一的一個實例。、它必須自己創(chuàng)立自己這唯一的一個實例。 3、它必須給所有其它的類提供自己這一實例。、它必須給所有其它的類提供自己這一實例。 最后,單態(tài)類在理論和實踐上都并非限定最后,單態(tài)類在理論和實踐上都并非限定只能有只能有“一個一個”實例,而是很容易推廣到任意實例,而是很容易推廣到任意有限個實例的情況。有限個實例的情況。 -62-舉例舉例n使用一個使用一個Calendar回答回答“二月有多少天二月有多少天”等問等問題,而不是創(chuàng)建多個題,而不是創(chuàng)建多個Calendar對象。對象。-63-工廠模式(工廠模式(Fac
27、tory)n工廠模式就是專門負(fù)責(zé)將大量有工廠模式就是專門負(fù)責(zé)將大量有共同接口的類實例化,而且不必事先實例化,而且不必事先知道每次是要實例化哪一個類的模知道每次是要實例化哪一個類的模式。式。 n工廠模式有以下幾種形態(tài)工廠模式有以下幾種形態(tài): n簡單工廠簡單工廠(Simple Factory)模式模式n工廠方法工廠方法(Factory Method)模式模式n抽象工廠抽象工廠(Abstract Factory)模式模式-64-簡單工廠簡單工廠(Simple Factory)模式模式n比如說比如說,你有一個描述你的后花園的系統(tǒng)你有一個描述你的后花園的系統(tǒng),在你在你的后花園里有各種的花的后花園里有各種
28、的花,但還沒有水果。你現(xiàn)但還沒有水果。你現(xiàn)在要往你的系統(tǒng)里引進一些新的類在要往你的系統(tǒng)里引進一些新的類,用來描述用來描述下列的水果下列的水果: 葡萄葡萄 Grapes 草莓草莓 Strawberry 蘋果蘋果 Apple -65-簡單工廠簡單工廠(Simple Factory)模式模式 -66-簡單工廠簡單工廠(Simple Factory)模式模式n作為小花果園的主人兼園丁作為小花果園的主人兼園丁,也是系統(tǒng)的也是系統(tǒng)的一部分一部分,自然要由一個合適的類來代表自然要由一個合適的類來代表,這這個類就是個類就是 FruitGardener類。類。 -67-園丁的工作園丁的工作(簡單工廠簡單工廠)n
29、FruitGardenerFruitGardener類會根據(jù)要求類會根據(jù)要求, ,創(chuàng)立出不同的水創(chuàng)立出不同的水果類果類, ,比如蘋果比如蘋果Apple,Apple,葡萄葡萄GrapeGrape或草莓或草莓StrawberryStrawberry的實例。的實例。n這里的園丁就如同一個可以創(chuàng)建水果產(chǎn)品的工廠一樣n如果接到不合法的要求如果接到不合法的要求, ,FruitGardenerFruitGardener類會給類會給出例外出例外BadFruitExceptionBadFruitException。 -68-豐收的果園(客戶端)豐收的果園(客戶端)n在使用時,只須呼叫在使用時,只須呼叫Fruit
30、Gardener的的factory()方方法即可法即可ntry FruitGardener gardener = new FruitGardener();FruitIF grape = gardener.factory(grape);FruitIF apple = gardener.factory(apple);FruitIF strawberry = gardener.factory(strawberry);.catch(BadFruitException e) . -69-小結(jié):小結(jié):簡單工廠模式的定義簡單工廠模式的定義n總而言之總而言之, ,簡單工廠模式簡單工廠模式就是由一個工廠類根據(jù)就
31、是由一個工廠類根據(jù)參數(shù)來決定創(chuàng)立出那一參數(shù)來決定創(chuàng)立出那一種產(chǎn)品類的實例。種產(chǎn)品類的實例。 -70-工廠方法模式工廠方法模式n工廠方法模式是簡單工廠模式的進一步抽象化工廠方法模式是簡單工廠模式的進一步抽象化和推廣。和推廣。n它比簡單工廠模式聰明的地方在于它比簡單工廠模式聰明的地方在于, 它不再作它不再作為一個具體的交通警察的面貌出現(xiàn)為一個具體的交通警察的面貌出現(xiàn),而是而是以交以交通警察局(工廠)的面貌出現(xiàn)。通警察局(工廠)的面貌出現(xiàn)。 具體的警察具體的警察成為工廠方法的執(zhí)行者成為工廠方法的執(zhí)行者。n工廠方法模式里工廠方法模式里不再只由一個工廠類決定哪一個產(chǎn)品類應(yīng)當(dāng)被實例化,這個決定被交給子類去
32、作。 -71-開始種植蔬菜開始種植蔬菜n我們準(zhǔn)備再次引進蔬菜類植物,比如我們準(zhǔn)備再次引進蔬菜類植物,比如: n西紅柿西紅柿 (Tomato) n土豆土豆 (Potato) n西芥蘭花西芥蘭花 (Broccoli) n蔬菜需要噴灑蔬菜需要噴灑(dust)殺蟲劑殺蟲劑(pesticide)除蟲除蟲 -72-為什么需要工廠方法模式為什么需要工廠方法模式n簡單工廠模式。簡單工廠模式。FruitGardener掌握所有水果類的生殺大權(quán)。掌握所有水果類的生殺大權(quán)。 -73-為什么需要工廠方法模式為什么需要工廠方法模式n再設(shè)計一個專管蔬菜類植物的工廠類再設(shè)計一個專管蔬菜類植物的工廠類 ?n這樣做一個明顯的不
33、足點就是不夠一般化和抽象化。這樣做一個明顯的不足點就是不夠一般化和抽象化。n在在FruitGardenerFruitGardener和和VeggieGardenerVeggieGardener類之間明顯存在類之間明顯存在很多共同點很多共同點, , 這些共同點應(yīng)當(dāng)抽出來一般化和框架化。這些共同點應(yīng)當(dāng)抽出來一般化和框架化。n這樣一來這樣一來, ,如果后花園的主人決定再在園子里引進些如果后花園的主人決定再在園子里引進些樹木類植物時樹木類植物時, , 我們有框架化的處理方法。我們有框架化的處理方法。-74-工廠方法模式的定義工廠方法模式的定義 -75-工廠方法模式的定義工廠方法模式的定義nConcre
34、teCreatorConcreteCreator 的的factory() factory() 方法返還的方法返還的數(shù)據(jù)類型是一個接口數(shù)據(jù)類型是一個接口 PlantIFPlantIF,而不是哪一而不是哪一個具體的產(chǎn)品類。個具體的產(chǎn)品類。n這種設(shè)計使得工廠類創(chuàng)立哪一個產(chǎn)品類的實這種設(shè)計使得工廠類創(chuàng)立哪一個產(chǎn)品類的實例細(xì)節(jié)完全封裝在工廠類內(nèi)部。例細(xì)節(jié)完全封裝在工廠類內(nèi)部。 n工廠方法模式又叫多形性工廠模式,顯然是工廠方法模式又叫多形性工廠模式,顯然是因為實工廠類都有共同的接口,或者都有共因為實工廠類都有共同的接口,或者都有共同的抽象父類。同的抽象父類。 -76-工廠方法模式在小花果園系統(tǒng)中的實現(xiàn)工廠
35、方法模式在小花果園系統(tǒng)中的實現(xiàn) -77-工廠方法模式在小花果園系統(tǒng)中的實現(xiàn)工廠方法模式在小花果園系統(tǒng)中的實現(xiàn)n取代了過去的全能角色的是一個抽象的取代了過去的全能角色的是一個抽象的園丁,這個角色規(guī)定出具體園丁角色需園丁,這個角色規(guī)定出具體園丁角色需要實現(xiàn)的具體職能,而真正負(fù)責(zé)作物管要實現(xiàn)的具體職能,而真正負(fù)責(zé)作物管理的則是各種作物的具體園丁角色。理的則是各種作物的具體園丁角色。-78-工廠方法模式在小花果園系統(tǒng)中的實現(xiàn)工廠方法模式在小花果園系統(tǒng)中的實現(xiàn)-79-抽象工廠模式抽象工廠模式n抽象工廠模式是所有形態(tài)的工廠模式中抽象工廠模式是所有形態(tài)的工廠模式中最為抽象和最具廣泛性的一種形態(tài)。最為抽象和最具廣泛性的一種形態(tài)。 n抽象工廠模式是工廠方法模式的進一步抽象工廠模式是工廠方法模式的進一步擴廣化和抽象化擴廣化和抽象化 -80-抽
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025中核集團福清核電校園招聘筆試模擬試題及答案解析
- 2025吉林大學(xué)白求恩第一醫(yī)院呼吸與危重癥醫(yī)學(xué)科錄入員招聘1人筆試模擬試題及答案解析
- 學(xué)員申請表范表
- 被評為員工的感言
- 語文教材培訓(xùn)心得體會18篇
- 足球比賽觀后感10篇
- 跑出一片天觀后感集合15篇
- 幾百幾十加減幾百幾十綜合考核習(xí)題大全附答案
- 超級領(lǐng)導(dǎo)力讀后感(35篇)
- 貨代銷售培訓(xùn)
- 人文社科書籍《中國在梁莊》
- 第12課 結(jié)交朋友-初識人工智能(教學(xué)設(shè)計)2023-2024學(xué)年第四冊信息技術(shù)河大版(三起)
- 數(shù)學(xué)探究:用向量法研究三角形的性質(zhì)教學(xué)設(shè)計-2023-2024學(xué)年高一下學(xué)期數(shù)學(xué)人教A版(2019)必修第二冊
- RB/T 223-2023國產(chǎn)化檢測儀器設(shè)備驗證評價指南氣相色譜儀
- DB3417-T 031-2024 學(xué)校食堂場所布局設(shè)置規(guī)范
- FANUC機器人培訓(xùn)教程(完成版)
- 奔馳車輛改裝合同協(xié)議書
- 陽光心理-健康人生小學(xué)生心理健康主題班會課件
- 2024年全國職業(yè)院校技能大賽高職組(檢驗檢疫技術(shù)賽項)考試題庫(含答案)
- 人員轉(zhuǎn)正考核表
- 2024年共青團入團積極分子團校結(jié)業(yè)考試試題庫及答案
評論
0/150
提交評論