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()));
查看全文
相关阅读:
linux C++类中成员变量和函数的使用
使用linux backtrace打印出错函数堆栈信息
R String 操作
make
*.efasta to fasta format transformation
python os 库
Ch12 Resampling statistics and bootstrapping
Updating an R installation
10 步让你成为更优秀的程序员
Working with large datasets
原文地址:https://www.cnblogs.com/tommyli/p/1202728.html
最新文章
c栈的基操
c中缀转后缀
C括号匹配
C循环队列
C实现归并排序
SQL Server 获取表或视图结构信息
MSSQL (SQL Server )数据库名称更改
ICO 图标的使用方法
amcharts 图形报表 ColumnChart (柱形图相关参数)
ajax 提交时中文会出现乱码的问题解决
热门文章
C# WinForm窗口最小化到系统托盘 右键操作菜单
c# PDF 转换成图片
linux shell 命令集锦
initramfs打包集成rootfs到image镜像及linux rootfs的正常启动
linux shell通配符及if语句判断
linux系统iot平台编程阶段总结
linux shell set命令
linux makefile中一些复制运算的区别
linux shell 自定义函数
linux进程间通信命名管道
Copyright © 2011-2022 走看看