1

我真的不确定什么是最好的标题。

在这个例子中,我有以下WorkerThread

 class WorkerThread
 {
    public int Id;

    public WorkerThread(int id)
    {
        Id = id;
    }

    public void Run()
    {
        // Thread code.
    }
 }

此类在我的程序中实例化 X 次,具体取决于我要运行的线程数,并且每个实例在 new Thread() 中运行

现在重要的是它所做的操作很复杂,所以我创建了不同的类,这些类将作为这个 WorkerThread 类的模块,例如:

class Browser
{
    private WorkerThread WorkerThread;

    public Browser(WorkerThread workerThread)
    {
        WorkerThread = workerThread;
    }

    public void Launch()
    {

    }

    public void Close()
    {

    }

    public void NavigateTo()
    {

    }
}

另一个模块。

class ProductFinder
{
    private WorkerThread WorkerThread;

    private Browser Browser { get { return WorkerThread.Browser; } }

    public ProductFinder(WorkerThread workerThread)
    {
        WorkerThread = workerThread;
    }

    private void GoToEbay()
    {
        Browser.NavigateTo("http://ebay.com");
    }

    public void FindProduct()
    {
        GoToEbay();
        // Do other stuff.
    }
}

在这里需要注意的是,每个模块类都将包含对实例化它的 WorkerThread 的引用,以便它可以与同一线程的其他模块通信。

最后,WorkerModule 必须以某种方式使用这些模块,以便它还可以充当模块之间相互通信的桥梁。

class WorkerThread
{
    public int Id;

    public Browser Browser;
    public ProductFinder ProductFinder;

    public WorkerThread(int id)
    {
        Id = id;

        ResetModules();
    }

    private void ResetModules()
    {
        Browser = new Browser(this);
        ProductFinder = new ProductFinder(this);
    }

    public void Run()
    {
        Browser.Launch();
        ProductFinder.FindProduct();
        Browser.Close();
    }
}

请注意,我如何使ProductFinder使用浏览器,方法是拥有一个带有 getter 的属性,该属性从实例化此类的WorkerThread获取浏览器。

所以问题是是否有更好的方法在 ProductFinder 中获取对浏览器的引用?

4

0 回答 0