特性開關有時只是簡簡單單的通過配置true or false來決定開或關,而有時要根據某種策略來決定開或關。對於開關策略,特性開關框架一般會提供不少預設的策略給我們用,但有時我們也會遇到框架沒有提供而我們又想要的,這時則需要我們自定義。掌握特性開關框架預設提供的開關策略及如何自定義開關策略都很重要。下面我以ff4j這個框架為例,介紹它自帶提供的策略及如何擴充套件實現自己的策略。
ff4j預設提供的策略
上面截圖列出了ff4j提供的所有預設策略,有基於表示式的策略,有基於時間的策略,有白名單黑名單策略,有權重策略等,下面我們看看預設策略怎麼用。
預設策略示例
<feature
uid=
"laolaxin"
enable
="true"
>
<flipstrategy
class
="org.ff4j.strategy.time.releasedateflipstrategy"
>
<param
name
="releasedate"
value
="2018-02-26-12:15"
/>
</flipstrategy>
<custom
-properties
>
<property
name
="return"
value
="活動未開始,盡請期待"
/>
</custom-properties>
</feature>
@
@feature(name
="laolaxin")
public這裡我們使用了releasedateflipstrategy這個策略,其實自定義策略的用法也是一樣的,不同的姿勢 class 欄位配的值不一樣。下面我們看看如何自定義策略。string
laolaxin()
如何自定義策略
ff4j使用了策略模式實現開關策略,具備良好的擴充套件性,所以我們擴充套件自定義策略也是蠻簡單。要自定義自己的策略,需要實現 flipstrategy 介面。
而ff4j為我們提供了乙個抽象類 abstractflipstrategy
所有我們其實只需要繼承abstractflipstrategy,然後實現evaluate方法,必要時也可以override init和 getinitparams 方法。下面我會通過乙個例子來細說。
自定義策略示例
自定義策略類
/**
* 自定義版本策略,對新版本開,對老版本關,新版本的版本值可配置
*/
publicclass
versionstrategy
extends
abstractflipstrategy
}
}
@override
publicboolean
evaluate(string
s, featurestore
featurestore, flippingexecutioncontext
flippingexecutioncontext)
/**
* 判斷是否是新版本
* 版本格式要求:數字.數字.數字…譬如 2.12.14
* @param flippingexecutioncontext 上下文
* @return boolean
*/
protectedboolean
isnewversion(flippingexecutioncontext
flippingexecutioncontext)
returntrue;
}
}
這裡我們可以看到我們自定義了乙個versionstrategy策略類,繼承了abstractflipstrategy ,重寫了init方法,實現了evaluate方法。init 方法是幹嘛的?它是初始化開關配置資料的,如上所示我們將配置的version值做了初始化。evaluate方法是做什麼的?它是用來判斷開關狀態的,如上所示我們通過比較配置的版本號與客戶端傳過來的版本來判斷是否是新版本,來決定開關是開還是關。下面我們看看自定義的這個策略怎麼用。
使用自定義策略
如上我們在配置中指定了 versionstrategy,並且配置了version值 「2.1.9", 業務**中我們將請求頭里的版本值賦給 flippingexecutioncontext 物件,並通過ff4j的check方法判斷開關狀態,事實上 check 方法最終會呼叫到 evaluate 方法來決定,請看下面原始碼。
到此我想大家都知道怎麼自定義和使用開關策略了。
MOS管的開關特性
一 靜態特性 mos管作為開關元件,同樣是工作在截止或導通兩種狀態。由於mos管是電壓控制項,所以主要由柵源電壓ugs決定其工作狀態。圖3.8 a 為由nmos增強型管構成的開關電路。圖3.8 nmos管構成的開關電路及其等效電路 工作特性如下 ugs 開啟電壓ut mos管工作在截止區,漏源電流i...
硬體電路之開關
開關分為機械開關和電子開關 例如三極體,流控流。由自己內部的電器控制開關 機械開關為普通的開關,在開關閉合或者斷開的一瞬間,會出現尖峰電壓或者浪湧電流,即高電伏。會對後面的負載產生影響。所以一般在後面加上乙個電容來濾波。當5v交流電源接通時,a點的電壓如圖上,對電容進行充電,電容電壓上公升逐漸緩慢,...
巨集開關和布林開關地獄
最近開發的產品遇到了網路問題,很嚴重的網路問題,具體我就不說了,總之問題很嚴重,專案組有個哥們兒,看似很有經驗,企圖通過新增新的處理邏輯來解決問題,這個方式我本身就很不同意,因為遇到問題之後最好的辦法就是找到問題的根源然後徹底解決,而不是在錯誤之上試圖彌補,這哥們兒用了一招試圖讓大家覺得他很有經驗,...