让班级代表ONE班级互相交流的更好方法

时间:2017-12-10 21:52:47

标签: c# module worker worker-thread

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

在此示例中,我有以下 WorkerThread

 class WorkerThread
 {
    public int Id;

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

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

这个类在我的程序中实例化了X次,具体取决于我想要运行多少个线程,每个实例在一个新的Thread()中运行。

现在重要的是它所做的操作很复杂,所以我为这个WorkerThread类创建了不同的类,它们的行为就像 modules 一样,例如:

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中获取对浏览器的引用?

0 个答案:

没有答案