設計模式並不直接用來完成代碼的編寫,而是描述在各種不同情況下,要怎麼解決問題的一種方案。
面向對象設計模式通常以類或對象來描述其中的關係和相互作用,但不涉及用來完成應用程序的特定類或對象。
設計模式能使不穩定依賴於相對穩定、具體依賴於相對抽象,避免會引起麻煩的緊耦合,以增強軟件設計面對並適應變化的能力。
並非所有的軟件模式都是設計模式,設計模式特指軟件“設計”層次上的問題。還有其它非設計模式的模式,如架構模式。同時,算法不能算是一種設計模式,因爲算法主要是用來解決計算上的問題,而非設計上的問題。
創建型模式
抽象工廠模式:爲一個產品族提供了統一的創建接口。當需要這個產品族的某一系列的時候,可以從抽象工廠中選出相應的系列創建一個具體的工廠類。
工廠方法模式:定義一個接口用於創建對象,但是讓子類決定初始化哪個類。工廠方法把一個類的初始化下放到子類。
根據InputStream is來選擇要創建的ImageReader
public class ImageReaderFactory {
public static ImageReader getImageReader( InputStream is ) {
int imageType = figureOutImageType( is );
switch( imageType ) {
case ImageReaderFactory.GIF:
return new GifReader( is );
case ImageReaderFactory.JPEG:
return new JpegReader( is );
// etc.
}
}
}
ImageReader接口和它的兩個子類模板
public interface ImageReader {
public DecodedImage getDecodedImage();
}
public class GifReader implements ImageReader {
public GifReader( InputStream in ) {
// ....
}
public class JpegReader implements ImageReader {
//....
}
生成器模式:將一個複雜對象的構建與它的表示分離,使得同樣的構建過程可以創建不同的表示。惰性初始模式:推遲對象的創建、數據的計算等需要耗費較多資源的操作,只有在第一次訪問的時候才執行。
對象池模式:通過回收利用對象避免獲取和釋放資源所需的昂貴成本。
原型模式:用原型實例指定創建對象的種類,並且通過拷貝這些原型創建新的對象。
單例模式:確保一個類只有一個實例,並提供對該實例的全局訪問。
多例模式:確保一個類只有命名的實例,並提供對這些實例的全局訪問。
資源獲取爲初始化:通過綁定到合適對象的生命週期來確保資源被適當地釋放。