一、說明:
容錯恢復機制是應用程序開發中常見的功能,在程序運行的時候,正常情況下應該按照某種方式來做,按照某種方式來做發生錯誤的話,系統並不會崩潰。而是由容忍出錯的能力,並且還能在出錯後有備用方案,也就是恢復機制,使程序正常執行下去。
二、實例:
下面一個實例:所有對系統的操作都有日誌記錄,而且這個日誌還需要有管理界面,通常情況下,會把日誌記錄到數據庫裏面,方便後續的管理,但是在數據庫記錄日誌的時候可能會發生錯誤,那就先記錄到文件裏面,在覈實的時候把文件裏面的記錄撞到數據庫中。
採用策略模式實現把日誌記錄到數據庫和紙質記錄到文件兩種日誌記錄的策略,然後在運行期間根據需要進行動態切換。
public interface LogStrategy {
/**
* 記錄日誌
* @param msg 需要記錄的日誌信息
* */
public void log(String msg);
}
public class DBLog implements LogStrategy {
@Override
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 {
@Override
public void log(String msg) {
System.out.println("現在把'"+msg+"'記錄到文件中");
}
}
public class LogContext {
public void log(String msg){
//在上下文中自行進行具體的策略選擇
//優先選擇策略:機率到數據庫中
LogStrategy strategy = new DBLog();
try{
strategy.log(msg);
}catch(Exception e){
strategy = new FileLog();
strategy.log(msg);
}
}
}
public class Client {
public static void main(String[] args){
LogContext log= new LogContext();
log.log("記錄日誌");
log.log("再次記錄日誌");
}
}
效果圖:
三、總結:
通過策略,實現一種算法之間的動態切換,從而達到容錯恢復的目的。策略的實質使分離算法,選擇實現。在整個過程中由上下文的策略對象去進行算法選擇,通過上下文將接口和具體算法實現解耦合,具有更好的擴展性,但是也存在缺點,用戶必須瞭解每種策略的不同,瞭解增加了對象的數目,並且策略只適合扁平的算法結構。
實例代碼地址:http://download.csdn.net/detail/wangdan1030/9535410
實例代碼地址:http://download.csdn.net/detail/wangdan1030/9535410