模式設計 面向對象設計原則_百度文庫_第1頁
模式設計 面向對象設計原則_百度文庫_第2頁
模式設計 面向對象設計原則_百度文庫_第3頁
模式設計 面向對象設計原則_百度文庫_第4頁
模式設計 面向對象設計原則_百度文庫_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、面向對象設計原則開閉原則擴展系統(tǒng)的行為時,不需要修改以前的代碼,而是擴展以前的代碼針對修改關閉針對擴展開放提高代碼的可維護性針對接口編程原則接口是高層的抽象接口可以隱藏實現的細節(jié)接口可以清晰指出對象的職責接口是實現軟件pluggable的關鍵松散耦合增加重用的可能性高內聚-低耦合原則最少知識原則類的單一職責原則一個類只做一件事一個類的職責僅僅有一個原因而發(fā)生改變例:如一個界面展示類夾雜業(yè)務邏輯代碼或者數據數據庫聯(lián)接代碼。依賴倒置原則抽象不應該依賴于具體具體應該依賴于抽象抽象依賴于具體,降低了重用的可能性里氏代換原則在所有引用基類的地方,都可以用此基類的子類替換,而不影響程序原來的功能違背里氏代

2、換原則將給程序帶來不穩(wěn)定性設計模式的分類創(chuàng)建者模式有關對象創(chuàng)建的模式結構型模式描述對象構造和組成的方式行為模式描述一組對象交互的方式設計模式基本原則(同面向對象設計模式學習的方法和原則看成熟框架的開源代碼,逆向工程實踐->思考->實踐->思考一個循環(huán)上升的過程原則了解設計模式能解決哪些問題不要為了模式而模式裝飾模式的定義裝飾模式可以動態(tài)的給一個對象附加一些功能。使用裝飾模式擴展功能不會產生類爆炸。它采用的是合成方式,比繼承方式更加靈活。策略模式策略模式是一個很簡單的模式,也是一個很常用的模式。它定義了一系列的算法,并將每一個算法封裝起來,而且使它們還可以相互替換。策略模式讓算

3、法獨立于使用它的客戶而獨立變化。策略模式應用的原則就是:找到系統(tǒng)中變化的部分,將變化的部分同其它穩(wěn)定的部分隔開。面向接口編程,而不要面向實現編程優(yōu)先考慮使用對象組合,而不是類繼承。設計原則采用了標準的面向對象技術對接口編程,而不是對實現編程Question:Java中有interface類型,面向對象的設計中有接口的概念(一個類的能被調用的方法的集合。我們前面的設計是不是一定要用Java中的interface來實現,可不可以用抽象的超類來實現。Answer:不是!“Program to an interface”的真實含義是“Program to an supertype”,Java中的int

4、erface和abstract superclass都是一種supertype,因此用抽象超類也能夠實現上述設計思想。上述設計思想的關鍵點是運用對“supertype”的多態(tài)性編程實現運行時的對象可以動態(tài)變化,而不是被編碼所固定。我們可以把“Program to an supertype”重新表述為“申明的變量應該是一個超級類型,通常是一個抽象類或interface,使得賦值給這些變量的對象可以是相應超級類型的任何一個具體實現,也就是說聲明這些變量的類不需要知道具體的對象類型”適配器適用性以下情況使用A d a p t e r模式你想使用一個已經存在的類,而它的接口不符合你的需求。你想創(chuàng)建一個

5、可以復用的類,該類可以與其他不相關的類或不可預見的類(即那些接口可能不一定兼容的類協(xié)同工作。現在,如果希望把鴨子包裝成火雞該怎么做?寫出你的代碼DuckAdapterpublic class DuckAdapter implements Turkey Duck duck;Random rand;public DuckAdapter(Duck duck this.duck = duck;rand = new Random(;public void gobble( duck.quack(;public void fly( if (rand.nextInt(5 = 0 duck.fly(;觀察者模式

6、設計原則1.將變化部分與固定不變的部分相分離。對該原則的另一種理解是:將變化的部分拿出來進行封裝,以便以后你可以修改它而不會影響那些不變的部分。這一原則幾乎是所有設計模式的基礎,所有設計模式都提供了這樣一種機制:讓系統(tǒng)的某些部分獨立于其他部分變化。2.對接口編程,而不是對實現編程高質量設計的原則-松耦合(loose Coupling如果兩個對象是松耦合的,則他們可以相互作用,但彼此的依賴性很小。觀察者模式符合松耦合的原則。因為:主題(subject只需要知道其觀察者(Observer實現了某個接口??梢噪S時加入觀察者。不需要修改主題就可以加入新的類型的觀察者主題和觀察者都可以獨立地被復用修改主

7、題或觀察者都不會影響另一方。觀察者之間互不相干。Observer模式-適用性當一個抽象模型有兩個方面,其中一個方面依賴于另一個方面時,將這兩者封裝在獨立的對象中使他們可以獨立的改變和復用。當一個對象的改變需要同時改變其他對象,而不知道具體有多少對象需要改變。當一個對象必須通知其他對象,而他又不能假定其它對象是誰??偨Y:設計模式模式分類:行為型意圖:給出一種提供靈活行為的方式基本思想:分離封裝變化模式實例:Strategy,ObserverObserver模式屬于行為型。教材作者認為Observer模式是“解耦型模式”(降低對象間的耦合度的最佳范例。中介者模式適用許多對象以復雜的方式交互,所導致

8、的依賴關系使系統(tǒng)難以理解和維護。一個對象引用其他很多對象,導致難以復用該對象。何時使用外觀模式(門面模式客戶只需要使用某個復雜系統(tǒng)的子集,或者需要以一種特殊的方式與系統(tǒng)交互時,使用門面模式。當需要跟蹤系統(tǒng)的使用情況時,使用門面模式。因為所有對系統(tǒng)的訪問都通過Facade,所以可以很容易的監(jiān)視系統(tǒng)的使用。希望封裝或者隱藏原系統(tǒng)時。編寫新類的成本小于所有人學會使用或維護原系統(tǒng)所需的成本時。應用原則、“只與你直接的朋友們通信?!钡厦滋胤▌t要求一個對象的相互作用是短程的。朋友的數目越少越好。其實質是減少耦合度。門面模式符合迪米特法則單件懶漢單件類Public class LazySingletonpr

9、ivate static MyClass uniqueInstance;/其他成員變量聲明private LazySingleton( public static MyClass getInstance(if (uniqueInstance=nulluniqueInstance=new LazySingleton(;return uniqueInstance/其他成員方法聲明類LazySingleton只在第一次被引用時才實例化,靜態(tài)加載該類并不會將他自己實例化。單件模式關鍵特征意圖:希望類只有一個實例,但沒有控制類實例化的全局變量(對象。同時希望確保所有客體對象使用該類的相同實例,而無需將引

10、用傳給它們。問題:幾個不同的客戶對象需要引用同一個對象,而且希望確保這種類型的對象數目不超過一個。解決方案:保證一個實例參與者與協(xié)作者:客戶對象只能通過getInstance(方法創(chuàng)建單例類的實例。效果:客戶對象無需操心是否存在單例類的實例,實例化有單例類自己控制。實現:一個引用單例對象的靜態(tài)私有成員變量一個公共靜態(tài)方法,負責實現一次性的實例化并返回對單例對象的引用設置為保護或私有的構造方法Java中的單例模式Runtime查看APIRuntime應用實例(在java中啟動應用程序多線程問題public class SingletonPrivate static Singleton uniqu

11、eInstance;Private Singleton(Public static synchronized Singleton getInstance( if (uniqueInstance=null uniqueInstance=new Singleton(;return uniqueInstance;Double-Checked Locking模式public class DCLSingletonPrivate volatile static DCLSingleton uniqueInstance;Private DCLSingleton(Public static DCLSingleton getInstance( if (uniqueInstance=null synchronized (DCLSingleton.calssif (uniqueInstance = null uniqueInstance=new DCLSingleton(;return uniqueInstance;在創(chuàng)建對象之前,添加一次檢查,避免不必要的鎖定,提高效率。餓漢式單例類Public class EagerSingletonprivate stat

溫馨提示

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

評論

0/150

提交評論