我似乎沒有在訪問者模式的使用場景中找到它(或者我可能沒有得到它)。它也不是分層的。針對條件的訪問者模式?
讓我們使用身份驗證的例子。 UserAuthenticator認證用戶給出的憑證。它返回一個結果對象。結果對象包含身份驗證結果:身份驗證成功,未成功,因爲未找到用戶名,未成功,因爲使用了非法字符等。客戶端代碼可能會使用條件來處理此問題。 In pseudocode:
AuthResult = Userauthenticator.authenticate(Username, Password)
if AuthResult.isAuthenticated: do something
else if AuthResult.AuthFailedBecauseUsernameNotFound: do something else
else if etc...
訪客模式會適合在這裏嗎? :
Authresult.acceptVisitor(AuthVisitor)
Authresult然後調用AuthVisitor的方法根據結果:
AuthVisitor.handleNotAuthenticatedBecauseUsernameNotFound
我不同意不使用他們沒有製造的東西。有些東西可能會解決問題而不打算這樣做。如果訪問者模式能夠很好地解決我的問題,爲什麼我不應該使用它?那麼問題就變成:解決方案是否是一個好的解決方案。沒有人以這種方式使用這並不意味着它是一個不好的解決方案,儘管它可能暗示了這個方向。更重要的是爲什麼這是一個好的或壞的解決方案。 如果McGyver接受了你的建議,他將會失業。 – koen 2009-08-09 11:56:29
另一件事是:認證處理的方式是不可知的例子。我不明白爲什麼我的示例將UserAuthenticator限制爲只有一種身份驗證方式(例如,只有LDAPUserAuthentication,OpenIdUserAuthentication等) – koen 2009-08-09 11:58:22