我似乎没有在访问者模式的使用场景中找到它(或者我可能没有得到它)。它也不是分层的。针对条件的访问者模式?
让我们使用身份验证的例子。 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