gpt4 book ai didi

Java - 使用代理类

转载 作者:行者123 更新时间:2023-11-30 10:53:11 25 4
gpt4 key购买 nike

所以我有几个类 ClassAClassC (不是我自己实现的,所以我不能修改它们的源代码)。每个类都实现了一些通用功能和一些独特功能。这些类用于为数据源提供不同类型的身份验证行为。因此,例如,这是每个类实现的示例:

// 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 类。其中涉及方法调用中的反射。如果那不可能,或者不是异常复杂,我想我将不得不使用静态代理类。

最佳答案

当然可以。

package utils;

public class ProxyClasses {

public static class ClassA {
public void function1(Object arg1, Object arg2, Object arg3) {}
}
public static class ClassB {
public void function1(Object arg1, Object arg2, Object arg3, String username, String password) {}
}
public static class ClassC {
public void function1(Object arg1, Object arg2, Object arg3, String token) {}
}

public static interface ClassCommon {
ProxyClasses function1(Object arg1, Object arg2, Object arg3); // or whatever
}
public static class ProxyClass implements ClassCommon {
@Override
public void function1(Object arg1, Object arg2, Object arg3) {
new ClassA().function1(arg1, arg2, arg3);
}

public ClassCommon authenticate() {
return new ClassCommon() {
@Override
public void function1(Object arg1, Object arg2, Object arg3) {
new ClassA().function1(arg1, arg2, arg3);
return this;
}
};
}
public ClassCommon authenticate(final String username, final String password) {
ClassB classB = new ClassB();
classB.login(username, password);
return new ClassCommon() {
@Override
public void function1(Object arg1, Object arg2, Object arg3) {
new ClassB().function1(arg1, arg2, arg3, username, password);
return this;
}
};
}
public ClassCommon authenticate(final String token) {
return new ClassCommon() {
@Override
public void function1(Object arg1, Object arg2, Object arg3) {
new ClassC().function1(arg1, arg2, arg3, token);
return this;
}
};
}
}
}

关于Java - 使用代理类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34112556/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com