【发布时间】:2015-12-06 00:26:12
【问题描述】:
所以我有几个课程ClassA 到ClassC(不是我自己实现的,所以我不能修改它们的源代码)。每个类都实现了一些常见的功能,以及一些独特的功能。这些类用于为数据源提供不同类型的身份验证行为。例如,下面是每个类实现的示例:
// Uses pre-configured privileged user credentials to get data
ClassA.getUsers(...)
// Saves session to allow user to log-in once and perform any operation after that without repeated authentication
ClassB.login(Username, Password)
ClassB.logout()
ClassB.getUsers(..., Username, Password)
// Uses given token to authenticate user and get data
ClassC.getUsers(..., Token)
我正在尝试为这些类开发一个ProxyClass,以便我可以像这样拨打电话:
ProxyClass
.getUsers(...); => calls ClassA.getUsers(...)
ProxyClass
.authenticate(Token)
.getUsers(...); => calls ClassC.getUsers(..., Token)
T obj = ProxyClass
.authenticate(Username, Password); => calls ClassD.login(Username, Password)
obj.getUsers(...) => calls ClassD.getUsers(...)
obj.logout() => calls ClassD.logout();
这甚至可能吗?如果可能,有人可以指导我了解ProxyClass 的外观吗?
是否可以确保,例如,如果ClassC 没有getUsers(),那么ProxyClass.authentication(Token). 根本不会显示getUsers?
如果代理类中的一个方法声明为void,我们是否可以再次返回代理类的一个实例,这样代理的调用者可以将调用链接在一起?
如果可能的话,一个完整的解决方案肯定会很好。但我也会满足于部分的。如果我有一个好的起点,我可能会计算出剩下的部分。但现在我什至不知道如何开始实施它。 :(
谢谢,AweSIM
编辑我想我应该提到ProxyClass,我的意思是DynamicProxy 类。这涉及方法调用中的反射。如果这是不可能的,或者不是非常复杂,我想我将不得不使用静态代理类。
【问题讨论】:
-
为什么 ClassB 需要两次凭证?
-
您不需要动态代理来通过反射调用方法。但是在这种特殊情况下,我什至没有看到任何使用反射的理由,它可以用纯 oop 解决。
标签: java proxy-classes