有一个由UI Controller
和Processor
组成的应用程序。 UI Controller
收到用户的请求并将其传递给Processor
。 Processor
有一个简单的界面:只有一个Process(input)
方法。
Processor
可能是单身人士,也可能不是,UI Controller
不应该知道。
现在,Processor
应该向UI Controller
发回一些进度通知。虽然我可以向Processor
可以订阅的UI Controller
界面添加一个活动,但我不知道如何在单身Processor
的情况下使其发挥作用:
Processor
不应保留对UI Controller
个实例的引用,以便在需要时释放内存UI Controller
您如何设计它以便UI Controller
无关心Processor
是否是单身?
答案 0 :(得分:1)
创建UIController
并引用Processor
接口(构造函数注入)。 UIController
不知道接口的实现是否是单例。将Processor
方法更改为Process(input, notifyCallback)
,以便Processor
可以在不保留UIController
引用的情况下发出通知。 notifyCallback
将是UIController
中实现的功能或界面(取决于语言)。
答案 1 :(得分:0)
您可以通过在Processor类中使用静态事件并在UIController中注册它来实现所需的结果。
private delegate void ProgressDelegate(Processor process, object data);
class Processor
{
public static event ProgressDelegate ProcessProgress;
private void method()
{
//....your code
if (ProcessProgress != null)
ProcessProgress(this, new object());
}
}
可以使用UIController注册事件,而无需担心对象。一旦事件被触发,您将传递处理器对象,并且UIController可以继续。
class UIController
{
static UIController()
{
Processor.ProcessProgress += new ProgressDelegate(HandleProcessProgress);
}
static void HandleProcessProgress(Processor p, object data)
{
}
}