簡體   English   中英

使用依賴注入時如何避免破壞封裝

[英]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類的正確方法,還是我在這里缺少什么?

依賴注入將意味着從ThreadPool隱藏Worker的創建。 理想情況下,應該將Runnable傳遞到ThreadPool構造函數中,並且ThreadPool甚至不應該知道Runnable恰好是Worker

Worker的創建應在組合根目錄中進行

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM