在這篇文章中,我主要講述如下內容:java
實例說明算法
某軟件公司要開發一個跨平臺圖像瀏覽系統,要求該系統可以顯示BMP、JPG、GIF、PNG等多種格式的文件, 而且可以在Windows、Linux、Unix等多個操做系統上運行。系統首先將各類格式的文件解析爲像素矩陣(Matrix),而後將像素矩陣顯示在屏幕上,在不一樣的操做系統中能夠調用不一樣的繪製函數來繪製像素矩陣。設計模式
設計方案 ide
問題函數
實例說明學習
•某軟件公司爲某電影院開發了一套影院售票系統,在該系統中須要爲不一樣類型的用戶提供不一樣的電影票打折方式,具體打折方案以下:測試
(1)學生憑學生證可享受票價8折優惠;ui
(2)年齡在10週歲及如下的兒童可享受每張票減免10元的優惠(原始票價需大於等於20元);this
(3)影院VIP用戶除享受票價半價優惠外還可進行積分,積分累計到必定額度可換取電影院贈送的獎品。spa
注意:該系統在未來可能還要根據須要引入新的打折方式。
設計方案
public class MovieTicket{
private double price;
//compute the price
public double calculate(String type) {
//student ticket
if(type.equalsIgnoreCase("student")) {
return this.price * 0.8;
}
//children ticket
else if(type.equalsIgnoreCase("children") && this.price >= 20 ) {
return this.price - 10;
}
//VIP ticket
else if(type.equalsIgnoreCase("vip")) {
//add points, code is omitted
return this.price * 0.5;
}
else {
return this.price;
}
}
}
複製代碼
問題
(1) MovieTicket類的calculate()方法很是龐大,它包含各類打折算法的實現代碼,在代碼中出現了較長的條件轉移語句,不利於測試和維護;
(2) 在增長新的打折算法或者對原有打折算法進行修改時必須修改MovieTicket類的源代碼,系統的靈活性和可擴展性較差;
(3)算法的複用性差,若是另外一個系統須要重用某些打折算法,只能經過對源代碼進行復制粘貼來重用,沒法單獨重用其中的某個或某些算法。
Alexander給出了關於模式的經典定義:
每一個模式都描述了一個在咱們的環境中不斷出現的問題,而後描述了該問題的解決方案的核心,經過這種方式,人們能夠無數次地重用那些已有的解決方案,無須再重複相同的工做。
通俗理解:模式是在特定環境下人們解決某類重複出現問題的一套成功或有效的解決方案。
備註:建立型模式主要是用於建立對象,結構性模式主要用於處理類或對象的組合,行爲型模式主要用於描述類或對象怎樣交互和怎樣分配職責
本文只是對設計模式進行了一個概述,具體經常使用的23種設計模式須要讀者業餘時間慢慢學習,同時須要知道的是在未來的軟件設計與開發中使用設計模式,是一個成功的軟件工程師必備的技能,這也正是咱們學習設計模式的目的。
參考資料:Java設計模式——劉偉編著