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()));
查看全文
相关阅读:
HDU 1505 City Game
HDU 1506 Largest Rectangle in a Histogram
HDU 1838 Chessboard
HDU 2512 一卡通大冒险
HDU 1081 To The Max
HDU 2845 Beans
HDU 1422 重温世界杯
HDU 1231 最大连续子序列
第6章 接口和实现
java面向抽象编程样例
原文地址:https://www.cnblogs.com/tommyli/p/1202728.html
最新文章
编译-可执行格式,谁执行?
IC-二进制, 自然数, 有符号数
编译-实践中的编译过程
编译-印象中的编译原理
PowerPC-Link Command File解析
PowerPC-object与elf中的符号引用
编程-函数栈与进程栈
PowerPC-MPC56xx Flash模式代码启动过程
UVa 11078 Open Credit System
LA 3177 长城守卫
热门文章
HDU 1501 Zipper
HDU 1078 FatMouse and Cheese
HDU 1503 Advanced Fruits
HDU 1513 Palindrome
HDU 1159 Common Subsequence
HDU 1080 Human Gene Functions
HDU 2571 命运
HDU 2084 数塔
HDU 2870 Largest Submatrix
HDU 2830 Matrix Swapping II
Copyright © 2011-2022 走看看