zoukankan
html css js c++ java
访问者模式
1:意图
表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。
2:类图
3:代码
namespace
Bll.Visitor
{
//
实体
public
class
EntityMessage
{
private
string
msg;
private
DateTime dateTime;
public
EntityMessage()
{
}
public
string
MSG
{
get
{
return
msg; }
set
{ msg
=
value; }
}
public
DateTime DateTime
{
get
{
return
dateTime; }
set
{ dateTime
=
value; }
}
}
//
抽象访问者
public
abstract
class
AbstractVistor
{
public
abstract
string
Vistor(AbstractElement abstractElement);
}
//
抽象元素
public
abstract
class
AbstractElement
{
public
abstract
string
Accept(AbstractVistor abstractVistor);
}
//
操作Message抽象类
public
abstract
class
Message : AbstractElement
{
private
EntityMessage entityMessage;
public
Message(EntityMessage message)
{
this
.entityMessage
=
message;
}
public
override
string
Accept(AbstractVistor abstractVistor)
{
return
abstractVistor.Vistor(
this
);
}
public
abstract
IList
<
EntityMessage
>
Get();
public
abstract
bool
Insert();
}
//
SQL方式操作Message
public
class
SqlMessage : Message
{
public
SqlMessage(EntityMessage eMsg)
:
base
(eMsg)
{ }
public
override
IList
<
EntityMessage
>
Get()
{
List
<
EntityMessage
>
list
=
new
List
<
EntityMessage
>
();
list.Add(
new
EntityMessage());
return
list;
}
public
override
bool
Insert()
{
return
true
;
}
}
//
Oracle方式操作Message
public
class
OracleMessage : Message
{
public
OracleMessage(EntityMessage eMsg)
:
base
(eMsg)
{ }
public
override
IList
<
EntityMessage
>
Get()
{
List
<
EntityMessage
>
list
=
new
List
<
EntityMessage
>
();
list.Add(
new
EntityMessage());
return
list;
}
public
override
bool
Insert()
{
return
true
;
}
}
//
Insert访问者
public
class
InsertVisitor : AbstractVistor
{
public
override
string
Vistor(AbstractElement abstractElement)
{
Message message
=
abstractElement
as
Message;
return
message.Insert().ToString()
+
"
<br />
"
;
}
}
//
Get访问者
public
class
GetVisitor : AbstractVistor
{
public
override
string
Vistor(AbstractElement abstractElement)
{
Message message
=
abstractElement
as
Message;
return
message.Insert().ToString()
+
"
<br />
"
;
}
}
//
Message集合
public
class
Messages
{
private
List
<
Message
>
list
=
new
List
<
Message
>
();
//
添加一个新元素
public
void
Attach(Message message)
{
list.Add(message);
}
public
void
Detach(Message message)
{
list.Remove(message);
}
public
string
Visitor(AbstractVistor vidtor)
{
string
msg
=
string
.Empty;
foreach
(Message m
in
list)
{
msg
+=
m.Accept(vidtor);
}
return
msg;
}
}
}
//
调用
Messages m
=
new
Messages(); m.Attach(
new
SqlMessage(
new
EntityMessage()));
m.Attach(
new
OracleMessage(
new
EntityMessage()));
查看全文
相关阅读:
Need to know which polygon shell contains a given face
静默安装 Microsoft Visual C++ 运行库
python linecache模块 读取文件行使用注意事项
不运行 maya 就可以获取 maya 版本,在 python 中获取
linux setfacl chmod g+s 修改文件夹和文件的默认访问权限和所属组
Maya material & shading groups 相互获取对应的彼此
PyQt PySide 查询内置可用的 style
maxscript 在长时间的运算中卡主,白屏的解决方法 windows.processPostedMessages()
QProcessBar setFormat 设置进度格式
MaxPlus WStr Python 中的字符串传递给 MaxPlus
原文地址:https://www.cnblogs.com/tommyli/p/1202728.html
最新文章
详解H5中的history单页面,手动实现单页面开发,细说h5单页面原理
如何写出优雅的js以及js特殊技巧
简易版jquery
基于canvas实现的fontawesome动态图标
一款基于react-native的弹窗提示组件
react-native关于ios的启动图标设置
Hyper-V笔记
单机模拟分片为复制集的集群部署
SOHO路由器的静态路由的不同
使用Sublime Text 2编辑和运行node-webkit应用程序
热门文章
单机模拟分片为单机的集群部署
"最大工作进程数"导致的WCF调用失败
操作系统重装记
为应用程序池“XX”提供服务的进程在与 Windows Process Activation Service 通信时出现严重错误
使用VBA将批量的WORD文档转换为PDF
ios开发学习资料
为VS2013添加SQLCE的支持
UI僵死分析
扩展WebBrowser控件,使其支持拖放文件
自动标注音标升级版
Copyright © 2011-2022 走看看