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()));
查看全文
相关阅读:
1010 幂次方
1316 丢瓶盖
1182 数列分段2
Mysql动态SQL语句标签
知了CMS开发说明文档(ibeetl) 建站系统文档
BeanUtils.populate()的用法
如何将网页的title前面的图标替换成自己公司的图标
HTTP、HTTPS常用的默认端口号
项目的xml文件中经常使用的sql语句
Invalid bound statement(not found): com.xxx.xxx.xxx.xxxMapper.save
原文地址:https://www.cnblogs.com/tommyli/p/1202728.html
最新文章
小刘同学的第四十七篇博文
小刘同学的第四十六篇博文
小刘同学的第四十五篇博文
小刘同学的第四十四篇博文
小刘同学的第四十三篇博文
Vue的Eslint中常见的报错解决方法
Vue-自定义过滤器
计算属性 computed
【python练习】多级菜单
【python练习】登陆接口
热门文章
数据类型
字符编码、进制
变量及基本语句
1736 创意吃鱼法
1387 最大正方形
1006 传纸条
1403 约数研究
1147 连续自然数和
1118 Backward Digit Sums(数字三角形)
1433 吃奶酪
Copyright © 2011-2022 走看看