日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

策略模式场景举例

發(fā)布時(shí)間:2023/12/20 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 策略模式场景举例 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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

/**

?* 日志記錄策略的接口

?*/

public interface LogStrategy {

??? /**

???? * 記錄日志

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

???? */

??? public void log(String msg);

}
?


(2)實(shí)現(xiàn)日志策略接口,先實(shí)現(xiàn)默認(rèn)的數(shù)據(jù)庫實(shí)現(xiàn),假設(shè)如果日志的長度超過長度就出錯(cuò),制造錯(cuò)誤的是一個(gè)最常見的運(yùn)行期錯(cuò)誤,示例代碼如下:

/**

?* 把日志記錄到數(shù)據(jù)庫

?*/

public class DbLog implements LogStrategy{

??? public void log(String msg) {?????

?????? //制造錯(cuò)誤

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

?????????? int a = 5/0;

?????? }

?????? System.out.println("現(xiàn)在把 '"+msg+"' 記錄到數(shù)據(jù)庫中");

??? }

}
?

接下來實(shí)現(xiàn)記錄日志到文件中去,示例代碼如下:

/**

?* 把日志記錄到文件

?*/

public class FileLog implements LogStrategy{

??? public void log(String msg) {

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

??? }

}
?

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

?

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

?

?(5)小結(jié)一下,通過上面的示例,會看到策略模式的一種簡單應(yīng)用,也順便了解一下基本的容錯(cuò)恢復(fù)機(jī)制的設(shè)計(jì)和實(shí)現(xiàn)。在實(shí)際的應(yīng)用中,需要設(shè)計(jì)容錯(cuò)恢復(fù)的系統(tǒng)一般要求都比較高,應(yīng)用也會比較復(fù)雜,但是基本的思路是差不多的。

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

這個(gè)例子同時(shí)說明了設(shè)計(jì)中的另外一個(gè)重要的概念,單一職責(zé)原理。

單一職責(zé)原則(SRP),就一個(gè)類而言應(yīng)該僅有一個(gè)引起它變化的原因。

如果一個(gè)類承擔(dān)的職責(zé)過多,就等于把這些職責(zé)耦合在一起,一個(gè)職責(zé)的變化可能會削弱或者抑制這個(gè)類完成其他職責(zé)的能力,這種耦合會導(dǎo)致脆弱的設(shè)計(jì)

當(dāng)變化發(fā)生時(shí),設(shè)計(jì)會遭受到意想不到的破壞。

轉(zhuǎn)載于:https://www.cnblogs.com/zhangshitong/p/6007607.html

總結(jié)

以上是生活随笔為你收集整理的策略模式场景举例的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。