Java設計模式-策略模式實際應用場景


容錯恢復機制
        容錯恢復機制是應用程序開發中非常常見的功能。那么什么是容錯恢復呢?簡單點說就是:程序運行的時候,正常情況下應該按照某種方式來做,如果按照某種方式來做發生錯誤的話,系統並不會崩潰,也不會就此不能繼續向下運行了,而是有容忍出錯的能力,不但能容忍程序運行出現錯誤,還提供出現錯誤后的備用方案,也就是恢復機制,來代替正常執行的功能,使程序繼續向下運行。
        舉個實際點的例子吧,比如在一個系統中,所有對系統的操作都要有日志記錄,而且這個日志還需要有管理界面,這種情況下通常會把日志記錄在數據庫里面,方便后續的管理,但是在記錄日志到數據庫的時候,可能會發生錯誤,比如暫時連不上數據庫了,那就先記錄在文件里面,然后在合適的時候把文件中的記錄再轉錄到數據庫中。
        對於這樣的功能的設計,就可以采用策略模式,把日志記錄到數據庫和日志記錄到文件當作兩種記錄日志的策略,然后在運行期間根據需要進行動態的切換。
        在這個例子的實現中,要示范由上下文來選擇具體的策略算法,前面的例子都是由客戶端選擇好具體的算法,然后設置到上下文中。
        下面還是通過代碼來示例一下。
(1)先定義日志策略接口,很簡單,就是一個記錄日志的方法,示例代碼如下:

/**

 * 日志記錄策略的接口

 */

public interface LogStrategy {

    /**

     * 記錄日志

     * @param msg 需記錄的日志信息

     */

    public void log(String msg);

}
 


(2)實現日志策略接口,先實現默認的數據庫實現,假設如果日志的長度超過長度就出錯,制造錯誤的是一個最常見的運行期錯誤,示例代碼如下:

/**

 * 把日志記錄到數據庫

 */

public class DbLog implements LogStrategy{

    public void log(String msg) {     

       //制造錯誤

       if(msg!=null && msg.trim().length()>5){

           int a = 5/0;

       }

       System.out.println("現在把 '"+msg+"' 記錄到數據庫中");

    }

}
 

接下來實現記錄日志到文件中去,示例代碼如下:

/**

 * 把日志記錄到文件

 */

public class FileLog implements LogStrategy{

    public void log(String msg) {

       System.out.println("現在把 '"+msg+"' 記錄到文件中");

    }

}
 

(3)接下來定義使用這些策略的上下文,注意這次是在上下文里面實現具體策略算法的選擇,所以不需要客戶端來指定具體的策略算法了,示例代碼如下:

 

(4)看看現在的客戶端,沒有了選擇具體實現策略算法的工作,變得非常簡單,故意多調用一次,可以看出不同的效果,示例代碼如下:

 

 (5)小結一下,通過上面的示例,會看到策略模式的一種簡單應用,也順便了解一下基本的容錯恢復機制的設計和實現。在實際的應用中,需要設計容錯恢復的系統一般要求都比較高,應用也會比較復雜,但是基本的思路是差不多的。

 作者演示了策略的一種變體。

這個例子同時說明了設計中的另外一個重要的概念,單一職責原理。

單一職責原則(SRP),就一個類而言應該僅有一個引起它變化的原因。

如果一個類承擔的職責過多,就等於把這些職責耦合在一起,一個職責的變化可能會削弱或者抑制這個類完成其他職責的能力,這種耦合會導致脆弱的設計

當變化發生時,設計會遭受到意想不到的破壞。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM