提问人:traveh 提问时间:8/17/2016 最后编辑:Communitytraveh 更新时间:8/17/2016 访问量:151
使用依赖注入时如何避免破坏封装
How to avoid breaking encapsulation when using dependency injection
问:
在阅读和观看了一些关于依赖注入的视频后,我仍然不明白如何在不破坏封装的情况下正确使用它。
注意:我阅读了如何在不破坏封装的情况下使用依赖注入?但我仍然不是 100% 确定。
我的代码是一个非常简单的线程池实现,其中包含类的对象,这是一个我不想向外界公开的包私有类(这真的不是他们关心的问题)。Worker
我的线程池构造函数需要一个参数(我不需要工厂,因为我事先确切知道我需要多少个工人)。Worker[] workers
由于我的类是包私有的,我认为构造线程工厂的正确方法是在类中实现静态工厂方法,如下所示:Worker
ThreadPool
public static ThreadPool createThreadPool(int numOfWorkers,
BlockingQueue<Runnable> jobQueue,
ThreadFactory threadFactory) {
Worker workers[] = new Worker[numOfWorkers];
for (int i = 0; i < workers.length; i++) {
workers[i] = new Worker(jobQueue, threadFactory, i);
// worker needs the factory in order to provide itself as Runnable
}
return new ThreadPool(workers, jobQueue);
}
那么,在静态工厂方法中创建所有这些新对象是从其他包中隐藏类的正确方法,还是我在这里遗漏了什么?Worker
答:
0赞
jaco0646
8/17/2016
#1
依赖注入意味着从 中隐藏 s 的创建。理想情况下,s 应该被传递到构造函数中,而 s 甚至不应该知道 s 恰好是 s。Worker
ThreadPool
Runnable
ThreadPool
ThreadPool
Runnable
Worker
s 的创建应在组合根中进行。Worker
评论