访问者模式
程序员文章站
2022-05-04 13:23:55
...
访问者模式
这个模式网上有很多文章其实很多的文章都容易让人混乱。尤其是在被访问者上添加对象,更有甚者是添加ObjectStructure
首先我说明下我对访问模式的理解
看代码会很容易理解
1、访问者接口
很简单的方法 只提供一个访问Home的方法
2、访问者接口A的实现
3、访问者接口B的实现
4、被访问者
作为主人当然欢迎任何人来访
5、调用类
这样输入为
I come from beijing
I come from shanghai
如果有天津来的客人 可以再实现一个tianjingVisitor
这样没有修改以前的任何接口实现
但是有个问题就是如果我的房子变化2套,这个时候就需要把被访问者变化为接口。但是有个问题是北京来的访问者访问第1套房子跟访问第2套房子是业务方法都只有1个,虽然这个修改可以在被访问者的accept方法中添加。
不过最后我还是认为访问者模式应该被用于访问者经常变化(如果添加新需求)而且被访问者相对来说相当固定的场景。
最后这个只是一家之言欢迎讨论
这个模式网上有很多文章其实很多的文章都容易让人混乱。尤其是在被访问者上添加对象,更有甚者是添加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方法中添加。
不过最后我还是认为访问者模式应该被用于访问者经常变化(如果添加新需求)而且被访问者相对来说相当固定的场景。
最后这个只是一家之言欢迎讨论
上一篇: Spring回顾之四 —— 使用Log4j,添加日志功能
下一篇: ArrayList 迭代器模式