我想使用委托来实现委托模式
public class Cat {
private delegate void SoundDelegate();
private SoundDelegate sound;
public Cat() {
sound = new SoundDelegate(SomeClass.DoSound1);
}
public void DoSound() {
sound();
}
}
public class PussyCat {
private delegate void SoundDelegate();
private SoundDelegate sound;
public PussyCat() {
sound = new SoundDelegate(SomeClass.DoSound2);
}
public void DoSound() {
sound();
}
}
public class SomeClass {
public static void DoSound1() {
Console.WriteLine("Sound 1");
}
public static void DoSound2() {
Console.WriteLine("Sound 2");
}
}
此代码是否会妨碍委托模式?我的意思是我可以使用委托来实现委托模式,还是这种方式不正确。
如果前面的示例是正确的,并且我可以使用委托来实现委托模式和观察者模式,那么观察者模式和委托模式之间的区别是什么?
答案 0 :(得分:1)
委托和观察者模式之间的差异是您的类对委托/观察者的控制级别。 如果是委托,则假定您的类完全控制应如何使用委托类。可观察类不知道其他类将如何使用它。 人们通常还认为,可观察类可以有任意数量的观察者,而委托通常是一个。 我还简化了所提供的代码,以避免不必要的类PussyCat,因此可以将原始类配置为在运行时使用任何委托。 您还可以找到CatObservable类来了解observable-observer实现的思想。
class Program
{
static void Main(string[] args)
{
Cat cat1 = new Cat(SomeClass.DoSound1);
Cat cat2 = new Cat(SomeClass.DoSound2);
CatObservable cat3 = new CatObservable();
cat3.Sound += Cat3_Sound;
cat3.Sound += (object sender, EventArgs e) => { SomeClass.DoSound1(); } ;
cat3.Sound += (object sender, EventArgs e) => { SomeClass.DoSound2(); };
}
private static void Cat3_Sound(object sender, EventArgs e)
{
throw new NotImplementedException();
}
}
public class Cat
{
public delegate void SoundDelegate();
public SoundDelegate Sound { get; set; }
public Cat(SoundDelegate soundDelagate)
{
Sound = soundDelagate;
}
protected void DoSound()
{
if (Sound!=null)
Sound();
}
}
public class CatObservable
{
public event EventHandler Sound;
public CatObservable()
{
}
protected void DoSound()
{
if (Sound != null)
Sound(this, EventArgs.Empty);
}
}
public class SomeClass
{
public static void DoSound1()
{
Console.WriteLine("Sound 1");
}
public static void DoSound2()
{
Console.WriteLine("Sound 2");
}
}