设计模式 - 学习笔记 - 访问者模式VisitorPattern
Posted 笑虾
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式 - 学习笔记 - 访问者模式VisitorPattern相关的知识,希望对你有一定的参考价值。
学习总结
- 访问者模式的目的是将
数据
与操作数据的行为
解构开,针对已知的数据(Element),可以扩展不同的行为(Visitor). - 养身保健的服务是固定的(比如只有4个)。
- 访问者接口决定
所有访问者
都知道有4个服务
。 - 可扩展点就是访问者。通过
创建新的访问者
实现访问者接口来实现扩展
。 - 局限在于
保健服务
定死了。如果需要添加新服务,那么所有访问者都要变。( 体现在Visitor接口
依赖了Element实现类
)
代码示例
养身保健接口
public interface Element{
/** 接待一位访问者 */
void accept(Visitor visitor);
}
具体养身保健服务
/** 按摩 */
public class Massage implements Element{
@Override
public void accept(Visitor visitor) { visitor.visit(this); }
}
/** 针灸 */
public class Acupuncture implements Element {
@Override
public void accept(Visitor visitor) { visitor.visit(this); }
}
/** 拔火罐 */
public class Cupping implements Element{
@Override
public void accept(Visitor visitor) { visitor.visit(this); }
}
/** 一条龙服务 */
public class OnePackageService implements Element {
@Override
public void accept(Visitor visitor) { visitor.visit(this); }
}
访问者接口
/**
* 访问者接口
* @author jerryjin
*/
public interface Visitor {
/** 体验按摩服务 */
void visit(Massage massage);
/** 体验针灸服务 */
void visit(Acupuncture acupuncture);
/** 体验拔火罐服务 */
void visit(Cupping cupping);
/** 体验一条龙服务 */
void visit(OnePackageService onepackageservice);
}
具体访问者
程序猿
public class Programmer implements Visitor {
/** 体验按摩服务 */
@Override
public void visit(Massage massage) {
System.out.println("“" + this.getClass().getSimpleName() + "”拒绝了" + massage.getClass().getSimpleName() + "服务。");
}
/** 体验针灸服务 */
@Override
public void visit(Acupuncture acupuncture) {
System.out.println("“" + this.getClass().getSimpleName() + "”拒绝了" + acupuncture.getClass().getSimpleName() + "服务。");
}
/** 体验拔火罐服务 */
@Override
public void visit(Cupping cupping) {
System.out.println("“" + this.getClass().getSimpleName() + "”体验了" + cupping.getClass().getSimpleName() + "服务,给了☆☆☆☆☆好评!");
}
/** 体验一条龙服务 */
@Override
public void visit(OnePackageService onepackageservice) {
System.out.println("“" + this.getClass().getSimpleName() + "”拒绝了" + onepackageservice.getClass().getSimpleName() + "服务。");
}
}
old镖客
public class OldPiaoKe implements Visitor {
/** 体验按摩服务 */
@Override
public void visit(Massage massage) {
System.out.println("“" + this.getClass().getSimpleName() + "”拒绝了" + massage.getClass().getSimpleName() + "服务。");
}
/** 体验针灸服务 */
@Override
public void visit(Acupuncture acupuncture) {
System.out.println("“" + this.getClass().getSimpleName() + "”拒绝了" + acupuncture.getClass().getSimpleName() + "服务。");
}
/** 体验拔火罐服务 */
@Override
public void visit(Cupping cupping) {
System.out.println("“" + this.getClass().getSimpleName() + "”拒绝了" + cupping.getClass().getSimpleName() + "服务。");
}
/** 体验一条龙服务 */
@Override
public void visit(OnePackageService onepackageservice) {
System.out.println("“" + this.getClass().getSimpleName() + "”体验了" + onepackageservice.getClass().getSimpleName() + "服务,给了☆☆☆☆☆好评!");
}
}
运行结果
====================程序员==================
“Programmer”拒绝了Massage服务。
“Programmer”拒绝了Acupuncture服务。
“Programmer”体验了Cupping服务,给了☆☆☆☆☆好评!
“Programmer”拒绝了OnePackageService服务。
====================old镖客==================
“OldPiaoKe”拒绝了Massage服务。
“OldPiaoKe”拒绝了Acupuncture服务。
“OldPiaoKe”拒绝了Cupping服务。
“OldPiaoKe”体验了OnePackageService服务,给了☆☆☆☆☆好评!
参考资料
以上是关于设计模式 - 学习笔记 - 访问者模式VisitorPattern的主要内容,如果未能解决你的问题,请参考以下文章
java/android 设计模式学习笔记(24)---访问者模式