2. 委托分离固定逻辑中的可变处理过程示例
  本例中主要演示通过委托SyncSignalProvider实现对变化部分的分离,降低代码的耦合度。
public delegate bool SyncSignalProvider();
//get syncsignal by auto mode
public bool GetSyncAuto()
{
//自动产生同步信号
return true;
}
//get syncsignal by manul mode
public bool GetSyncManul()
{
//手动产生同步信号
return false;
}
//固定逻辑
public void RefreshSyncSignal(SyncSignalProvider getSyncSignal)
{
bool sync = getSyncSignal();
if (sync)
{
//do something...
}
else
{
//do others...
}
}
//委托分离变化示例
public void TestDelegate()
{
RefreshSyncSignal(new SyncSignalProvider(GetSyncAuto));
}
  本例中同样包含四个步骤:
  1. 定义了委托SyncSignalProvider,用于包装提供同步信号的不同方法;本委托有bool类型返回值,表示同步信号的True、False(模拟高低电平)。
  2. 定义了两个停工同步信号的方法GetSyncAuto/GetSyncManul,它们分别以自动和手动的方式提供同步信号(bool类型的返回值)。
  3. 定义包含固定逻辑的方法RefreshSyncSiganl,方法接收一个同步信号提供委托getSyncSiganl。该方法根据同步信号的不同执行两个分支的操作,而这两个分支内的逻辑是固定的;可变部分是同步信号的获取方式(通过委托传递进来,这样将变化分离了出去,由调用者管理变化)。
  4. 定义具体的应用代码TestDelegate,该方法调用RefreshSyncSiganl,让其根据委托对象 new SyncSignalProvider(GetSyncAuto)提供的同步信号获取方法GetsyncAuto来获取同步信号,进而完成固定逻辑。
  当然,如果调用者因为停电等原因必须手动提供同步信号时,只需要为RefreshSyncSiganl方法传递包装GetSyncManul的委托可以了,可以避免修改RefreshSyncSiganl方法。
  这是借助委托实现软件设计优化(封装、分离变化)的一个小示例。