我打算创建一个实用程序类APIUtility
,它包装了一个由服务器引擎生成的唯一对象令牌,一旦我使用我的用户名和密码获取对象令牌,我就开门了,所以我如果令牌仍然存在,则可以随时访问引擎。
我希望在获得访问权限后使用现有的“APIUtility”,以避免不必要的身份验证工作。通过这个'APIUtility',我直接将许多函数调用到服务器引擎。但是现在,我还有其他一些课程,他们在不同的地方承担不同的责任:例如构建数据,逻辑验证,条件提升,所以这些类都需要有一个基线使用APIUtility
来访问引擎数据,有人为此设计好吗?因为我认为每个类都有一个变量APIUtility
我们需要设置它来创建这些类的实例并不是一个好的设计。
答案 0 :(得分:2)
我认为你走在正确的轨道上;简单总是最好的。
让所有需要APIUtility
的类将一个实例作为构造函数中的依赖项。
这样,如果您需要/想要,您可以只实例化APIUtility
一次并让它共享。
仅供参考,这是有些人所说的“穷人的依赖注射”。
答案 1 :(得分:0)
我会使用依赖注入,Spring框架。另一种选择是使用Singleton模式。
答案 2 :(得分:0)
你应该采用依赖注入\ IOC框架,如CDI或spring。我个人更喜欢CDI,但这是个人选择。
使用依赖注入,Container管理您的类之间的关联。如果访问具有需要注入的元素的类,则编译器通过Constructor-Injection(Constructor)或Setter-Injection(Setter-Method)设置它们。
答案 3 :(得分:0)
我会使用带有dependency injection的春天和适当的bean scope。
答案 4 :(得分:0)
这绝对是控制反转或战略模式的一种情况。
总的来说,虽然我不得不说,也许你的责任有点混乱。有什么理由它不能是一个静态的util类(它将一个标记作为参数)?如果不是,那么你可以这样做,如果是的话,你应该想到一个更有用的名字。
答案 5 :(得分:-1)
您可以使用ThreadLocal
类型的变量。
ThreadLocal
可以被视为访问范围,例如请求范围或会话范围。这是一个线程范围。您可以在ThreadLocal
中设置任何对象,此对象将 global 和 local 到访问此对象的特定线程。 全球和本地?让我解释一下:
- 存储在
ThreadLocal
中的值 global 到线程,这意味着可以从该线程内的任何位置访问它们。如果一个线程调用来自多个类的方法,那么所有方法都可以看到由其他方法设置的ThreadLocal
变量(因为它们在同一个线程中执行)。不需要显式传递该值。这就像你使用全局变量一样。- 存储在 ThreadLocal 中的值是线程的本地值,这意味着每个线程都有自己的
ThreadLocal
变量。一个线程无法访问/修改其他线程的ThreadLocal
变量。
Java Thread Local – How to use and code sample
e.g。你可以有类似的东西:
public class APIUtility {
private static ThreadLocal<Engine> ENGINE_LOCAL = new ThreadLocal<Engine>();
public static void setEngine(Engine engine) {
ENGINE_LOCAL.set(engine);
}
public static Engine getEngine() {
ENGINE_LOCAL.get();
}
}
class NameValidator {
public void foo() {
Object obj = APIUtility.getEngine().getSomething();
}
}
另见: