设计模式-----观察者模式
来源:互联网 发布:软件编程工具官网下载 编辑:程序博客网 时间:2024/04/19 17:30
//观察者 如果增加观察者只要 实现接口IObserver 然后注册Register() 你要增加的观察者即可以···· 不需要的时候注销即可UnRegister()`````
//被观察者 要实现接口 IObservable 然后增加 遍历通知注册的观察者即可NotifyObservers()
//“观察者”接口
public interface IObserver
...{
void Notify(object anObject);
}
//“被观察对象”接口
public interface IObservable
...{
void Register(IObserver anObserver);
void UnRegister(IObserver anObserver);
}
public class ObservableImpl : IObservable
...{
//保存观察对象的容器
//注意 此处用Hashtable 和 泛型都可以··· 但是偶不知道那个更好··
//protected Hashtable _observerContainer = new Hashtable();
protected List<IObserver> _observerContainer = new List<IObserver>();
//注册观察者
public void Register(IObserver anObserver)
...{
// _observerContainer.Add(anObserver, anObserver);
_observerContainer.Add(anObserver);
}
//撤销注册
public void UnRegister(IObserver anObserver)
...{
//_observerContainer.Remove(anObserver);
_observerContainer.Remove(anObserver);
}
//将事件通知观察者
public void NotifyObservers(object anObject)
...{
//枚举容器中的观察者,将事件一一通知给他们
foreach (IObserver anObserver in _observerContainer)
...{
anObserver.Notify(anObject);
}
}
}
public class SomeData : ObservableImpl
...{
//被观察者中的数据
float m_fSomeValue;
//改变数据的属性
public float SomeValue
...{
set
...{
m_fSomeValue = value;
NotifyObservers(m_fSomeValue);//将改变的消息通知观察者
}
}
}
//用户界面(观察者)
public class SomeKindOfUI : IObserver
...{
public void Notify(object anObject)
...{
Console.WriteLine("The new value is:" + anObject);
}
}
public class AnOtherUi : IObserver
...{
IObserver 成员#region IObserver 成员
public void Notify(object anObject)
...{
Console.WriteLine("通知收到"+(float)anObject/2.0);
}
#endregion
}
//实际调用的过程
public class MainClass
...{
public static void Main()
...{
//创建观察者和被观察者
SomeKindOfUI ui = new SomeKindOfUI();
AnOtherUi uo = new AnOtherUi();
SomeData data = new SomeData();
data.Register(uo);
//在被观察对象中注册观察者
data.Register(ui);
//改变被观察对象中的数据,这时被观察者会通知观察者
data.SomeValue = 1000f;
//注销观察者,停止观察
data.UnRegister(ui);
data.SomeValue = 1000f;
}
}
public interface IObserver
...{
void Notify(object anObject);
}
//“被观察对象”接口
public interface IObservable
...{
void Register(IObserver anObserver);
void UnRegister(IObserver anObserver);
}
public class ObservableImpl : IObservable
...{
//保存观察对象的容器
//注意 此处用Hashtable 和 泛型都可以··· 但是偶不知道那个更好··
//protected Hashtable _observerContainer = new Hashtable();
protected List<IObserver> _observerContainer = new List<IObserver>();
//注册观察者
public void Register(IObserver anObserver)
...{
// _observerContainer.Add(anObserver, anObserver);
_observerContainer.Add(anObserver);
}
//撤销注册
public void UnRegister(IObserver anObserver)
...{
//_observerContainer.Remove(anObserver);
_observerContainer.Remove(anObserver);
}
//将事件通知观察者
public void NotifyObservers(object anObject)
...{
//枚举容器中的观察者,将事件一一通知给他们
foreach (IObserver anObserver in _observerContainer)
...{
anObserver.Notify(anObject);
}
}
}
public class SomeData : ObservableImpl
...{
//被观察者中的数据
float m_fSomeValue;
//改变数据的属性
public float SomeValue
...{
set
...{
m_fSomeValue = value;
NotifyObservers(m_fSomeValue);//将改变的消息通知观察者
}
}
}
//用户界面(观察者)
public class SomeKindOfUI : IObserver
...{
public void Notify(object anObject)
...{
Console.WriteLine("The new value is:" + anObject);
}
}
public class AnOtherUi : IObserver
...{
IObserver 成员#region IObserver 成员
public void Notify(object anObject)
...{
Console.WriteLine("通知收到"+(float)anObject/2.0);
}
#endregion
}
//实际调用的过程
public class MainClass
...{
public static void Main()
...{
//创建观察者和被观察者
SomeKindOfUI ui = new SomeKindOfUI();
AnOtherUi uo = new AnOtherUi();
SomeData data = new SomeData();
data.Register(uo);
//在被观察对象中注册观察者
data.Register(ui);
//改变被观察对象中的数据,这时被观察者会通知观察者
data.SomeValue = 1000f;
//注销观察者,停止观察
data.UnRegister(ui);
data.SomeValue = 1000f;
}
}
- 模式设计:观察者模式
- 设计模式-----观察者模式
- 设计模式-观察者模式
- 设计模式--观察者模式
- 设计模式:观察者模式
- 设计模式-----观察者模式
- 设计模式:观察者模式
- 设计模式-观察者模式
- 设计模式 观察者模式
- 设计模式-观察者模式
- 设计模式-【观察者模式】
- 设计模式-观察者模式
- 设计模式 -- 观察者模式
- 设计模式-观察者模式
- 【设计模式】观察者模式
- 设计模式- 观察者模式
- 设计模式- 观察者模式
- 设计模式--观察者模式
- 设计模式-----抽象工厂
- flash++json+php+MySQL身份认证系统
- 品味Java子类型多态的魅力java教程
- 简单身份认证之php脚本
- 使用设计模式构建通用数据库访问类
- 设计模式-----观察者模式
- 客户等记及业务日志系统1
- The Enigma Protector 1.40 Build 26 January 2008
- 客户等记及业务日志系统2
- 委托 事件 代码理解
- PHP Concerned
- Maemo Linux手机平台系列分析:5 安装Maemo SDK
- Ruby 编程规范
- 使用doxygen为C/C++程序生成中文文档(上)