目前想到的可以使用規約模式的情況(以後想到了再補充):
1. 當有一組條件,被多處使用,且這些條件可以任意組合時,這個時候考慮使用規約模式來解耦;
下面看一下規約模式的簡單實現:
publicinte***ce ispecificationwhere t : class
public
abstract
class specification: ispecificationwhere t : class
public ispecificationor( ispecificationother )
public ispecificationnot()
}public
class andspecification: specificationwhere t : class
public
override
bool
issatisfiedby( t item )
}public
class orspecification: specificationwhere t : class
public
override
bool
issatisfiedby( t item )
}public
class notspecification: specificationwhere t : class
public
override
bool
issatisfiedby( t item )
}public
class namespecification : specification
}public
class agespecification : specification
}public
class
userinfo
public
int age
}
其中 userinfo 是乙個測試類,namespecification, agespeicification 是兩個規約模式的實現。下面看一下測試**:
publicclass
specificationtest
,new userinfo,
new userinfo,
};var namespec = new
namespecification();
var agespec = new
agespecification();
var andspec =namespec.and( agespec );
var orspec =namespec.or( agespec );
var notspec =namespec.not();
console.writeline(
"name specification ... ");
foreach ( var item in
users )
}console.writeline();
console.writeline(
"age specification ... ");
foreach ( var item in
users )
}console.writeline();
console.writeline(
"and specification ... ");
foreach ( var item in
users )
}console.writeline();
console.writeline(
"or specification ... ");
foreach ( var item in
users )
}console.writeline();
console.writeline(
"not specification ... ");
foreach ( var item in
users )
}console.readline();
}}
關於規約模式,網上也有很多講解的。關鍵還是理解其是在什麼情景下提出來的方法。至於規約模式的實現,基本思想是一樣的。但是各種語言有根據各種語言的特性實現的版本,c#版的有乙個比較好的使用 lambda 表示式實現的。上面的實現版本算是中規中矩的。
規約模式Specification Pattern
規約模式允許我們將一小塊領域知識封裝到乙個單元中,即規約,然後可以在code base中對其進行復用。它可以用來解決在查詢中氾濫著getbysomething方法的問題,以及對查詢條件的組合和復用。舉個例子 public class movie entity public datetime rele...
CDT規約學習
cdt規約 又叫迴圈式遠動規約,它規定了在電網資料採集與監控系統中的功能 幀結構 資訊字結構和傳輸規則等。cdt的幀結構 同步字控制字 資訊字1 資訊字2 eb 90 eb 90 eb 90 同步字 7161 1001 00 f7 控制字00 8806 8101 a7 資訊字1 0138 0761 ...
阿里巴巴編碼規約學習之安全規約
乙個成熟的系統都是要專門的鑑權機制的,比如微服務中的鑑權元件,或者單體應用中的 也可以起到類似的作用,市面上的鑑權手段多樣,這裡主要是說明許可權控制的重要性。在設計的時候,就要考慮到如果有別有用心的使用者,得到了其他使用者的訪問請求,加以修改,如果沒有許可權控制的話,是容易出大事的 手機號 身份證號...