`
donald3003a
  • 浏览: 64525 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论
  • 淼淼E馒头: 这举列有点不恰当啊。。电影人和不同类型的电影。是两个不同概念 ...
    合成模式

访问者模式

阅读更多
访问者模式
这个模式网上有很多文章其实很多的文章都容易让人混乱。尤其是在被访问者上添加对象,更有甚者是添加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方法中添加。

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

相关推荐

Global site tag (gtag.js) - Google Analytics