在阅读并观看有关依赖注入的视频后,我仍然不了解如何在不破坏封装的情况下正确使用它。
注意:我看过How to use Dependency Injection without breaking encapsulation?,但我仍然没有100%确定。
我的代码是一个非常简单的线程池实现,它包含类Worker
的对象,这是一个我不想暴露给外部世界的包私有类(而且它是&#39) ;真的不关心他们。)
我的线程池构造函数需要一个参数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 :(得分:0)
依赖注入意味着隐藏Worker
中ThreadPool
的创建。理想情况下,Runnable
应该传递到ThreadPool
构造函数中,而ThreadPool
甚至不应该知道Runnable
恰好是Worker
第
Worker
中应创建filepath<-paste0(getwd(),"/Test.csv")
filestring<-readChar(filepath, file.info(filepath)$size)
filestring<-gsub('.','',filestring,fixed=TRUE)
fread(filestring)
。