Observer观察者模式是怎么回事?能说一下吗? 如题,能给此模式一个说明吗?谢谢了! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 观察者模式有经典的实现:using System;using System.Collections.Generic;public interface IObserver{ void ISeeyou();}public class Sender{ List<IObserver> observers = new List<IObserver>(); public void AddObserver(IObserver observer) { observers.Add(observer); } public void CallObservers() { foreach (IObserver observer in observers) { observer.ISeeyou(); } } public void Work() { Console.WriteLine("After this, Call my observers:"); //when finish doing my work CallObservers(); }}public class Observer1 : IObserver{ public void ISeeyou() { Console.WriteLine("Observer1 doing work..."); }}public class Observer2 : IObserver{ public void ISeeyou() { Console.WriteLine("Observer2 doing work..."); }}class Program{ [STAThread] public static void Main() { Sender sender = new Sender(); sender.AddObserver(new Observer1()); sender.AddObserver(new Observer2()); sender.Work(); }}以上的实现是不依赖于具体的语言,稍加修改就可以变成java或其他语言的observer模式.但是.net对于很多设计模式都可以根据独特的架构轻松实现,比如Observer可以很容易使用事件和委托实现. 补充一下以上程序的说明:就是sender对象不管它的观察者(observer1,2,...)会做哪些事,它只是按某种顺序把这些观察者注册到它的观察者列表(observers),然后在完成某项工作时发给observers一个信号,然后由观察者根据信号去做自己的事. 与其是在回答你的问题,不如说让自己复习一下,呵呵. 谢谢您的热心解答,有一处不太理解class Program{ [STAThread] public static void Main() { Sender sender = new Sender(); sender.AddObserver(new Observer1()); sender.AddObserver(new Observer2()); sender.Work(); }}其中方法void AddObserver(IObserver observer)参数应该为IObserver类型,而这里传入的参数是new Observer1(),我认为是一个Observer1类的实例化对象,那参数类型不是不匹配了吗,还有接口类型没有构造函数,不能实例化,但是它能够作为一种参数的类型吗?我们一般参数都是int 或string类的我能理解,借口类型如何理解啊?能解释下吗,非常感谢! 对这种方法不是很了解, public void CallObservers() { foreach (IObserver observer in observers) { observer.ISeeyou(); } }在这里observer.ISeeyou();是用了observer接口的方法,但是一般都是用实例化对象加点才能调用其中的方法(或静态方法则是类加点),而接口是不能实例化的啊,小弟不是很理解,能一并给予说明吗,谢谢了! 等你语法搞熟了 你就会用到很多类似 button.click+=new ...的东西等你想搞清楚究竟这些是什么的时候 你会发现 原来这就是.net framework实现的观察者 呃语言基础不扎实还辛苦人家高手介绍半天class Observer1 : IObserver这句的意思是 Observer1实现IObserver,可以理解为Observer1属于IObserver,是IObserver的一种。那么你说 new Observer1() 有问题吗?详细的一时说不清楚了,认真看基础去吧。 listview 与 tooltip 页面 保持信息 超时时间已到。超时时间已到,但是尚未从池中获取连接。 怎么让SQLDATAREADER的指针转到第一条记录 求救:高手来指点一下 C#数据源问题 MDI 中子窗口如何打开子窗口 继承控件时遇到的疑问 ASM代码转C#代码。懂汇编的麻烦帮忙翻译下 工作工作!!!!!!!!!!!!!!! 如果只是学习用的装net2003是否还要装windows server 2003 ? c#错误,非静态的字段、方法或属性 要求对象引用. 怎样为PropertyGrid控件,添加下拉列表
using System;
using System.Collections.Generic;public interface IObserver
{
void ISeeyou();
}public class Sender
{
List<IObserver> observers = new List<IObserver>(); public void AddObserver(IObserver observer)
{
observers.Add(observer);
} public void CallObservers()
{
foreach (IObserver observer in observers)
{
observer.ISeeyou();
}
} public void Work()
{
Console.WriteLine("After this, Call my observers:");
//when finish doing my work
CallObservers();
}
}public class Observer1 : IObserver
{
public void ISeeyou()
{
Console.WriteLine("Observer1 doing work...");
}
}public class Observer2 : IObserver
{
public void ISeeyou()
{
Console.WriteLine("Observer2 doing work...");
}
}class Program
{
[STAThread]
public static void Main()
{
Sender sender = new Sender();
sender.AddObserver(new Observer1());
sender.AddObserver(new Observer2());
sender.Work();
}
}以上的实现是不依赖于具体的语言,稍加修改就可以变成java或其他语言的observer模式.但是.net对于很多设计模式都可以根据独特的架构轻松实现,比如Observer可以很容易使用事件和委托实现.
class Program
{
[STAThread]
public static void Main()
{
Sender sender = new Sender();
sender.AddObserver(new Observer1());
sender.AddObserver(new Observer2());
sender.Work();
}
}
其中方法void AddObserver(IObserver observer)参数应该为IObserver类型,而这里传入的参数是
new Observer1(),我认为是一个Observer1类的实例化对象,那参数类型不是不匹配了吗,
还有接口类型没有构造函数,不能实例化,但是它能够作为一种参数的类型吗?我们一般参数都是int 或string类的我能理解,借口类型如何理解啊?能解释下吗,非常感谢!
public void CallObservers()
{
foreach (IObserver observer in observers)
{
observer.ISeeyou();
}
}
在这里observer.ISeeyou();是用了observer接口的方法,但是一般都是用实例化对象加点才能调用其中的方法(或静态方法则是类加点),而接口是不能实例化的啊,小弟不是很理解,能一并给予说明吗,谢谢了!
等你想搞清楚究竟这些是什么的时候 你会发现 原来这就是.net framework实现的观察者
可以理解为Observer1属于IObserver,是IObserver的一种。那么你说 new Observer1() 有问题吗?详细的一时说不清楚了,认真看基础去吧。