会员
周边
众包
新闻
博问
闪存
所有博客
当前博客
我的博客
我的园子
账号设置
简洁模式
...
退出登录
注册
登录
DotNetFresh
博客园
首页
新随笔
联系
订阅
管理
公告
一个观察者模式(Observer Pattern)例子
/**/
/*
****************************************************
* 一个观察者模式(Observer Pattern)例子
*本例子包括四个角色:
*1.抽象主题(ISubject) 2.抽象观察者(IObserver)
*3.具体主题(ConcreteSubject) 4.具体观察者(ConcreteObserver)
*他们之间的关系是:当主题发生某种变化时,
*能够通知所有观察他的观察者发生改变了.
*****************************************************
*/
using
System;
using
System.Collections;
/**/
///
<summary>
///
主题接口
///
</summary>
interface
ISubject
{
string
Name
{
set
;
get
;}
//
主题的名称
void
AddObserver(IObserver observer);
//
添加观察者方法
void
DelObserver(IObserver observer);
//
删除观察者方法
void
Notify();
//
通知所有观察者方法
}
/**/
///
<summary>
///
观察者接口
///
</summary>
interface
IObserver
{
void
Update();
//
更新观察者的状态
}
/**/
///
<summary>
///
主题
///
</summary>
class
Subject : ISubject
{
private
string
name
=
string
.Empty;
private
string
state
=
string
.Empty;
private
ArrayList observers
=
new
ArrayList();
public
string
State
{
get
{
return
this
.state; }
set
{
this
.state
=
value; }
}
ISubject 成员
#region
ISubject 成员
public
string
Name
{
get
{
return
this
.name;
}
set
{
this
.name
=
value;
}
}
public
void
AddObserver(IObserver observer)
{
this
.observers.Add(observer);
}
public
void
DelObserver(IObserver observer)
{
this
.observers.Remove(observer);
}
public
void
Notify()
{
foreach
(IObserver observer
in
observers)
observer.Update();
}
#endregion
}
/**/
///
<summary>
///
观察者
///
</summary>
class
Observer : IObserver
{
private
string
observerState
=
string
.Empty;
//
观察者观察主题的状态
private
string
name
=
string
.Empty;
//
观察者名称
private
Subject subject
=
null
;
//
所观察的主题
public
Observer(Subject subject,
string
name)
{
this
.subject
=
subject;
this
.name
=
name;
}
IObserver 成员
#region
IObserver 成员
public
void
Update()
{
this
.observerState
=
subject.State;
Console.WriteLine(
"
Observer {0}'s new state is {1}!
"
,
this
.name,
this
.subject.State);
}
#endregion
}
class
Client
{
public
static
void
Main(
string
[] args)
{
Subject s
=
new
Subject();
s.AddObserver(
new
Observer(s,
"
woody
"
));
s.AddObserver(
new
Observer(s,
"
hello
"
));
s.State
=
"
test
"
;
s.Notify();
Console.Read();
}
}
posted on
2005-04-30 11:37
DotNetFresh
阅读(
1089
) 评论(
2
)
编辑
收藏
举报
会员力量,点亮园子希望
刷新页面
返回顶部
Powered by:
博客园
Copyright © 2024 DotNetFresh
Powered by .NET 8.0 on Kubernetes