1. 程式人生 > >Java 可擴充套件性與設計模式

Java 可擴充套件性與設計模式

java之設計模式與擴充套件性

獲得最大限度複用的關鍵在於對新需求和現有需求發生變化的預見性,要求系統具有良好的擴充套件性。一個擴充套件性不好的設計會導致維護代價的增加,甚至導致重構。設計模式可以確保系統能以特定方式變化,提高擴充套件性,從而避免重構。每一個設計模式允許系統結構的某個方面的變化獨立於其他方面,這樣產生的系統對於某一特殊變化更加健壯。 以下一些導致重構的原因,以及解決這些問題的設計模式:

1、通過顯示地指定一個類來建立物件:

建立物件時制定類名將使你受特定實現的約束,而不是特定介面的約束。這回使得未來的變化更加複雜。應該間接地建立物件。設計模式:Abstract Factory,Factory Method,Prototype; 

2、對特殊操作的依賴:

當你為請求指定一個特殊的操作時,完成該請求的方式就固定下來了。為了避免把請求程式碼寫死,可以在編譯時刻或執行時刻方便地改變響應請求的方法。設計模式:Chain Of Resposibility,Command; 

3、對硬體和軟體平臺的依賴:

外部的作業系統介面和應用程式介面(API)在不同的軟硬體平臺上是不同的。依賴於特定平臺的軟體將很難移植到其他平臺上,甚至很難跟上本地平臺的更新。實際系統時,限制其平臺的相關性就很重要。設計模式:Abstract Factory,Bridge; 

4、對物件表示或實現的依賴:

知道物件怎樣表示、儲存、定位或者實現的客戶在物件發生變化時可能也需要變化。對客戶隱藏這些資訊能阻止連鎖變化。設計模式:Abstract Factory,Bridge,Memento,Proxy;

5、演算法依賴:

演算法在開發和複用時常常被擴充套件、優化和替換。依賴於某個特定演算法的物件在演算法發生變化時不得不變化。因此,有可能發生變化的演算法應該被孤立起來。設計模式:Builder,Iterator,Strategy,Template Method,Visitor; 

6、高耦合:

高耦合的類很難獨立地被複用,因為它們是相互依賴的。高耦合產生單塊的系統,要改變或刪除一個類,必須理解和改變其他許多類。這樣的系統是很難理解、維護、移植的米集體。低耦合提高一個類被複用的可能,並提高系統的擴充套件性。設計模式使用抽象耦合和分層技術來提高系統的低耦合性。設計模式:Abstract Factory,Command,Facade,Mediator,Observer,Chain Of Responsiblity;

7、通過生成子類來擴充功能:

通常很難通過定義子類來定製物件。每一個新類都有固定的實現開銷(初始化、終止處理等)。定義子類還需要對父類有深入的瞭解。如,重定義一個操作可能需要重定義其他操作。一個被重定義的操作可能需要呼叫繼承下來的操作。並且子類方法會導致類爆炸,因為即使對於一個簡單的擴充,也不得不引入許多新的子類。一般的物件組合技術和委託技術,是繼承之外,組合物件行為的一種靈活方法。新功能可以通過以新的方式組合已有物件,而不是通過定義已存在類的子類方式加到應用中。另一方面,過多的使用物件組合會使設計難於理解。許多設計模式的設計中,可以定義一個子類,且將它的例項和已存在的例項進行組合來引入定製的功能。設計模式:Bridge,Chain Of Responsiblity,Composite,Decorator,Observer,Strategy;

 8、不能方便地對類進行修改:

有時,不得不改變一個難以修改的類。也許需要原始碼而又沒有,或者可能對類的任何改變會要求修改許多已存在的其他子類。設計模式提供這種請況下對類進行修改的方法。設計模式:Adapter,Decorator,Visitor。