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()));
查看全文
相关阅读:
Entity Framework Core 2.0 新特性
asp.net core部署时自定义监听端口,提高部署的灵活性
asp.net core使用jexus部署在linux无法正确 获取远程ip的解决办法
使用xshell连接服务器,数字键盘无法使用解决办法
使用Jexus 5.8.2在Centos下部署运行Asp.net core
【DevOps】DevOps成功的八大炫酷工具
【Network】Calico, Flannel, Weave and Docker Overlay Network 各种网络模型之间的区别
【Network】UDP 大包怎么发? MTU怎么设置?
【Network】高性能 UDP 应该怎么做?
【Network】golang 容器项目 flannel/UDP相关资料
原文地址:https://www.cnblogs.com/tommyli/p/1202728.html
最新文章
C语言 strftime 格式化显示日期时间 时间戳
C++ vector 删除符合条件的元素
C语言条件编译
Linux 挂载和卸载U盘
Ubuntu设置环境变量
Win Socket编程原理及简单实例
maven中的Exclusions详解
pom.xml中properties作用
艺赛旗RPA谷歌浏览器拾取
SqlServer保留几位小数的两种做法
热门文章
sql查询表的所有字段和表字段对应的类型
sql server exec 参数的传递
sqlserver 动态sql执行execute和sp_executesql
【SQL SERVER】T-SQL 字符串前加 N 是什么意思
wcf 错误提示
.net core 实现简单爬虫—抓取博客园的博文列表
ABP从入门到精通(5):.扩展国际化语言资源
ABP从入门到精通(4):使用基于JWT标准的Token访问WebApi
ASP.NET Core身份认证服务框架IdentityServer4(2)-整体介绍
IdentityServer4(1)- 特性一览
Copyright © 2011-2022 走看看