21、访问者模式(Visitor)
访问者模式把数据结构和作用于结构上的操作解耦合,使得操作集合可相对自由地演化。访问者模式适用于数据结构相对稳定算法又易变化的系统。因为访问者模式使得算法操作增加变得容易。若系统数据结构对象易于变化,经常有新的数据对象增加进来,则不适合使用访问者模式。访问者模式的优点是增加操作很容易,因为增加操作意味着增加新的访问者。访问者模式将有关行为集中到一个访问者对象中,其改变不影响系统数据结构。其缺点就是增加新的数据结构很困难。—— From 百科
简单来说,访问者模式就是一种分离对象数据结构与行为的方法,通过这种分离,可达到为一个被访问者动态添加新的操作而无需做其它的修改的效果。简单关系图:

来看看原码:一个Visitor类,存放要访问的对象,
|
1
2
3
4
5
6
7
8
9
10
11
|
public
interface
Visitor {
public
void
visit(Subject sub);
}
public
class
MyVisitor
implements
Visitor {
@Override
public
void
visit(Subject sub) {
System.out.println(
"visit the subject:"
+sub.getSubject());
}
}
|
Subject类,accept方法,接受将要访问它的对象,getSubject()获取将要被访问的属性,
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
public
interface
Subject {
public
void
accept(Visitor visitor);
public
String getSubject();
}
public
class
MySubject
implements
Subject {
@Override
public
void
accept(Visitor visitor) {
visitor.visit(
this
);
}
@Override
public
String getSubject() {
return
"love"
;
}
}
|
测试:
|
1
2
3
4
5
6
7
8
9
|
public
class
Test {
public
static
void
main(String[] args) {
Visitor visitor =
new
MyVisitor();
Subject sub =
new
MySubject();
sub.accept(visitor);
}
}
|
输出:visit the subject:love
本文介绍访问者模式,一种用于分离对象数据结构与行为的设计模式,适用于数据结构稳定但需要频繁扩展功能的系统。通过示例代码展示如何实现访问者模式,并讨论其应用场景。
&spm=1001.2101.3001.5002&articleId=78778897&d=1&t=3&u=72cf7b2c31e84f9e9c3d5694df1a7515)
982

被折叠的 条评论
为什么被折叠?



