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