我真的不确定什么是最好的标题。
在此示例中,我有以下 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中获取对浏览器的引用?