欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

访问者模式

程序员文章站 2022-05-04 13:23:55
...
访问者模式
这个模式网上有很多文章其实很多的文章都容易让人混乱。尤其是在被访问者上添加对象,更有甚者是添加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方法中添加。

不过最后我还是认为访问者模式应该被用于访问者经常变化(如果添加新需求)而且被访问者相对来说相当固定的场景。
最后这个只是一家之言欢迎讨论