4
假设我的门面类有两个子系统类。每个子系统有不同的事件。如何将事件从门面附加到另一个类
的FacadeClass是
public class FacadeClass
{
private SubsystemClass1 _s1;
private SubsystemClass2 _s2;
public FacadeClass()
{
_s1 = new SubsystemClass1();
_s2 = new SubsystemClass2();
}
}
和SubsystemClass1
public class SubsystemClass1
{
public event EventHandler FetchComplete;
public void OnFetchComplete(EventArgs e)
{
if (FetchComplete != null)
{
FetchComplete(this, e);
}
}
}
然后SubsystemClass2
public class SubsystemClass2
{
public event EventHandler SendComplete;
public void OnSendComplete(EventArgs e)
{
if (SendComplete != null)
{
SendComplete(this, e);
}
}
}
认为我有另一个类,使用外观类,我想从SubsystemClass1附着事件和SubsystemClass2。问题是如何附加事件,而无需在facade类中重新定义它,也不需要使用子系统类(如果有的话)?
举例redifine它在外观类
public class FacadeClass
{
private SubsystemClass1 _s1;
private SubsystemClass2 _s2;
public FacadeClass()
{
_s1 = new SubsystemClass1();
_s2 = new SubsystemClass2();
}
// Redifine the event
public event EventHandler FetchComplete
{
add { _s1.FetchComplete += value; }
remove { _s1.FetchComplete -= value; }
}
public event EventHandler SendComplete
{
add { _s2.SendComplete += value; }
remove { _s2.SendComplete -= value; }
}
}
示例使用子系统类,让他们提前公共
public class FacadeClass
{
// Make both class to public
public SubsystemClass1 _s1;
public SubsystemClass2 _s2;
public FacadeClass()
{
_s1 = new SubsystemClass1();
_s2 = new SubsystemClass2();
}
}
public class AnotherClass
{
FacadeClass _fd;
public AnotherClass()
{
_fd = new FacadeClass();
// Little bit ugly
_fd._s1.FetchComplete += new EventHandler(_s1_FetchComplete);
}
void _s1_FetchComplete(object sender, EventArgs e)
{
// Do Something Here
}
}
感谢,
问候布赖恩...
我这样做的信息隐藏。如果有多个使用子系统类的类,我必须重新配置它。 – brian 2012-08-03 02:30:10