23种设计模式:访问者模式
访问者模式
1.介绍
概念
在访问者模式(Visitor Pattern)中,我们使用了一个访问者类,它改变了元素类的执行算法。通过这种方式,元素的执行算法可以随着访问者改变而改变。这种类型的设计模式属于行为型模式。根据模式,元素对象已接受访问者对象,这样访问者对象就可以处理元素对象上的操作。
主要作用
主要将数据结构与数据操作分离。
解决的问题
稳定的数据结构和易变的操作耦合问题。
使用场景
1、对象结构中对象对应的类很少改变,但经常需要在此对象结构上定义新的操作。 2、需要对一个对象结构中的对象进行很多不同的并且不相关的操作,而需要避免让这些操作"污染"这些对象的类,也不希望在增加新操作时修改这些类。
(引用自菜鸟教程)
2.实现
背景
访问一个朋友的家,参观不同的房间。
实现步骤
1.创建Rooms接口
public interface Rooms {
public void accept(Visitor visitor);
}
2.创建Bathroom类
public class Bathroom implements Rooms{
@Override
public void accept(Visitor visitor) {
visitor.visit(this);
}
}
3.创建Bedroom类
public class Bedroom implements Rooms{
@Override
public void accept(Visitor visitor) {
visitor.visit(this);
}
}
4.创建Livingroom类
public class Livingroom implements Rooms{
@Override
public void accept(Visitor visitor) {
visitor.visit(this);
}
}
5.创建Visitor接口
public interface Visitor {
public void visit(FriendHome friendHome);
public void visit(Bathroom bathroom);
public void visit(Bedroom bedroom);
public void visit(Livingroom livingroom);
}
6.创建VisitorIsMe类
public class VisitorIsMe implements Visitor{
@Override
public void visit(FriendHome friendHome) {
System.out.println("参观朋友的家...");
}
@Override
public void visit(Bathroom bathroom) {
System.out.println("参观厕所...");
}
@Override
public void visit(Bedroom bedroom) {
System.out.println("参观卧室...");
}
@Override
public void visit(Livingroom livingroom) {
System.out.println("参观客厅...");
}
}
7.创建测试类
public class VisitorPatternDemo {
public static void main(String[] args) {
FriendHome friendHome = new FriendHome();
friendHome.accept(new VisitorIsMe());
}
}
6.运行结果
参观朋友的家…
参观厕所…
参观卧室…
参观客厅…