会员
周边
众包
新闻
博问
闪存
所有博客
当前博客
我的博客
我的园子
账号设置
简洁模式
...
退出登录
注册
登录
愚蠢的笨蛋
博客园
首页
新随笔
联系
管理
订阅
ChainOfResponsibility职责链模式
一个请求被多个对象处理,但是每个请求只有一个接收者处理:
硬编码
using
System.Collections;
abstract
class
BaseHandler
{
public
abstract
bool
CanHandleRequest();
public
abstract
void
HandlerRequest(Request request);
}
public
class
AHandler : BaseHandler
{
public
override
void
HandlerRequest(Request request)
{
}
public
override
bool
CanHandleRequest()
{
}
}
public
class
BHandler :BaseHandler
{
public
override
void
HandlerRequest(Request request)
{
}
public
override
bool
CanHandleRequest()
{
}
}
public
class
CHandler : BaseHandler
{
public
override
void
HandlerRequest(Request request)
{
}
public
override
bool
CanHandleRequest()
{
}
}
public
class
Sender
{
public
void
Process()
{
Request request
=
new
Request();
ArrayList list
=
new
ArrayList();
//
。。。。做决定的是请求的发送者
list.Add(
new
AHandler());
list.Add(
new
BHandler());
list.Add(
new
CHandler());
foreach
(BaseHandler handler
in
list)
{
if
(handler.CanHandleRequest)
{
handler.HandlerRequest(request);
}
}
}
}
职责链:
ChainOfResponsibility
using
System.Collections;
abstract
class
BaseHandler
{
public
BaseHandler(BaseHandler next)
{
this
.next
=
next;
}
protected
abstract
bool
CanHandleRequest();
public
virtual
void
HandlerRequest(Request request)
{
if
(next
!=
null
)
{
this
.next.HandlerRequest(request);
}
}
private
BaseHandler next;
public
BaseHandler Next
{
get
{
return
this
.next;
}
set
{
this
.next
=
value;
}
}
}
public
class
AHandler : BaseHandler
{
public
AHandler(BaseHandler next)
:
base
(next)
{ }
protected
override
bool
CanHandleRequest()
{
//
}
public
override
void
HandlerRequest(Request request)
{
if
(
this
.CanHandleRequest())
{
}
else
{
base
.HandlerRequest(
this
.request);
}
}
}
public
class
BHandler : BaseHandler
{
public
BHandler(BaseHandler next)
:
base
(next)
{ }
protected
override
bool
CanHandleRequest()
{
//
}
public
override
void
HandlerRequest(Request request)
{
if
(
this
.CanHandleRequest())
{
}
else
{
base
.HandlerRequest(
this
.request);
}
}
}
public
class
CHandler : BaseHandler
{
public
CHandler(BaseHandler next)
:
base
(next)
{ }
protected
override
bool
CanHandleRequest()
{
//
}
public
override
void
HandlerRequest(Request request)
{
if
(
this
.CanHandleRequest())
{
}
else
{
base
.HandlerRequest(
this
.request);
}
}
}
public
class
DHandler : BaseHandler
{
public
DHandler(BaseHandler next)
:
base
(next)
{ }
protected
override
bool
CanHandleRequest()
{
//
}
public
override
void
HandlerRequest(Request request)
{
if
(
this
.CanHandleRequest())
{
}
else
{
base
.HandlerRequest(
this
.request);
}
}
}
public
class
Sender
{
public
void
Process(BaseHandler handler)
{
Request request
=
new
Request();
handler.HandlerRequest(request);
}
}
class
App
{
public
static
void
Main()
{
Sender sender
=
new
Sender();
BaseHandler handler1
=
new
AHandler(
null
);
BaseHandler handler2
=
new
BHandler(handler1);
BaseHandler handler3
=
new
CHandler(handler2);
BaseHandler handler4
=
new
DHandler(handler3);
handler3.Next
=
handler4;
handler4.Next
=
handler2;
//
动态的更改链表
//
handler3--> handler4 --> handler2 --> handler1
sender.Process(handler3);
}
}
posted @
2009-05-22 11:51
愚蠢的笨蛋
阅读(
115
) 评论(
0
)
编辑
收藏
举报
会员力量,点亮园子希望
刷新页面
返回顶部
公告