访问者模式
这个模式网上有很多文章其实很多的文章都容易让人混乱。尤其是在被访问者上添加对象,更有甚者是添加ObjectStructure
首先我说明下我对访问模式的理解
看代码会很容易理解
1、访问者接口
很简单的方法 只提供一个访问Home的方法
2、访问者接口A的实现
3、访问者接口B的实现
4、被访问者
作为主人当然欢迎任何人来访
5、调用类
这样输入为
I come from beijing
I come from shanghai
如果有天津来的客人 可以再实现一个tianjingVisitor
这样没有修改以前的任何接口实现
但是有个问题就是如果我的房子变化2套,这个时候就需要把被访问者变化为接口。但是有个问题是北京来的访问者访问第1套房子跟访问第2套房子是业务方法都只有1个,虽然这个修改可以在被访问者的accept方法中添加。
不过最后我还是认为访问者模式[color=red]应该被用于访问者经常变化(如果添加新需求)而且被访问者相对来说相当固定的场景。[/color]
最后这个只是一家之言欢迎讨论
这个模式网上有很多文章其实很多的文章都容易让人混乱。尤其是在被访问者上添加对象,更有甚者是添加ObjectStructure
首先我说明下我对访问模式的理解
看代码会很容易理解
1、访问者接口
public interface Visitor {
void visit(Home myhome);
}
很简单的方法 只提供一个访问Home的方法
2、访问者接口A的实现
public class BeijingVisitor implements Visitor{
@Override
public void visit(Home myhome) {
System.out.println("I come from beijing");
}
}
3、访问者接口B的实现
public class ShanghaiVisitor implements Visitor{
@Override
public void visit(Home myhome) {
System.out.println("I come from shanghai");
}
}
4、被访问者
public void accept(Visitor visitor) {
visitor.visit(this);
}
作为主人当然欢迎任何人来访
5、调用类
public class Main {
public static void main(String[] args) {
Visitor beijingVisitor = new BeijingVisitor();
Visitor shanghaiVisitor = new ShanghaiVisitor();
Home myhome =new Home();
myhome.accept(beijingVisitor);
myhome.accept(shanghaiVisitor);
}
}
这样输入为
I come from beijing
I come from shanghai
如果有天津来的客人 可以再实现一个tianjingVisitor
这样没有修改以前的任何接口实现
但是有个问题就是如果我的房子变化2套,这个时候就需要把被访问者变化为接口。但是有个问题是北京来的访问者访问第1套房子跟访问第2套房子是业务方法都只有1个,虽然这个修改可以在被访问者的accept方法中添加。
不过最后我还是认为访问者模式[color=red]应该被用于访问者经常变化(如果添加新需求)而且被访问者相对来说相当固定的场景。[/color]
最后这个只是一家之言欢迎讨论