規約模式學習總結

2021-09-08 23:21:05 字數 2239 閱讀 6307

目前想到的可以使用規約模式的情況(以後想到了再補充):

1. 當有一組條件,被多處使用,且這些條件可以任意組合時,這個時候考慮使用規約模式來解耦;

下面看一下規約模式的簡單實現:

public

inte***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 是兩個規約模式的實現。下面看一下測試**:

public

class

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 ...

阿里巴巴編碼規約學習之安全規約

乙個成熟的系統都是要專門的鑑權機制的,比如微服務中的鑑權元件,或者單體應用中的 也可以起到類似的作用,市面上的鑑權手段多樣,這裡主要是說明許可權控制的重要性。在設計的時候,就要考慮到如果有別有用心的使用者,得到了其他使用者的訪問請求,加以修改,如果沒有許可權控制的話,是容易出大事的 手機號 身份證號...