一 FacetPattern(側面模式)
意圖:限制一個介面來提供較少的authority,通常介面僅提供方法的子集或者參數的子集。
在面向能力編程(CapabilityOrientedProgramming)中Facets被作為一種安全模式,Facets符合最小權利原則(PrincipleOfLeastAuthority)
。例如,如果一些對象的用戶端僅需要讀資訊,那麼僅提供用戶端唯讀Facet。
Facets應當以這樣一種方式實現:如果方法最初被添加到介面,那麼預設情況下不被添加到Facet。方法應當在必須明確指示(通過中繼資料或命名規範)時才被包括到一個Facet中。如果一個對象先前知道需要哪些Facets,作為最佳化措施對象能夠cache這些Facets。
和其它的安全模式相似,FacetPattern被用來增強系統的安全和魯棒性。即使當安全自身不是一個問題的情況下,通過提供一個帶有確定性或純粹性的功能子集的介面也是有好處的。
FacetPattern的一個Facet不同於適配器模式中的適配器,Facet介面總是原始介面的子集,功能是限制許可權而不是在不相容的介面之間進行轉換。
FacetPattern也屬於封裝模式,使用了封裝機制或者handle/body機制。
本段翻譯自
http://c2.com/cgi-bin/wiki?CaretakerPattern
二 Caretaker Pattern(臨時代理模式)
意圖: 對客戶可以臨時許可一種能力,使用完後能夠隨即撤銷。
適用情境: 在能力系統中,當你想要一個對象能夠對不同的客戶來分別臨時撤銷許可時可以使用Caretaker Pattern。
Caretaker Pattern也是封裝模式(也稱做HandleBodyPattern)的變種。
為了建立可撤銷的能力,在Caretaker Pattern模式中通過透明的轉寄訊息到特定的接收者(body)來許可一種能力,最後通過設定引用的封裝對象(接收對象的封裝)為null來撤銷原先許可的能力。為此,Caretaker
Pattern模式中客戶不能看到主體對象(body對象),僅能看到臨時代理對象,封裝是透明的,臨時代理對象不能夠察覺主體對象的存在與否,所以也不必有指向臨時代理對象的指標。
正常情況臨時代理有一個與轉寄介面分離的介面,被用來觸發撤銷操作。
如果系統使用許可標誌,臨時代理能夠限制那種許可被允許,而不是僅支援要麼全有要麼全無的許可。這可以通過與FacetPattern模式中的handle對象組合來達到這種效果。
ParadigmRegained的作者(MarkMiller和JonathanShapiro)認為Caretaker
Pattern通過使參數失效來撤銷許可是不可實施的。
通常認為DataAccessObject是Caretaker Pattern模式的一個子類。
本段 翻譯自http://c2.com/cgi-bin/wiki?FacetPattern