访问者模式

简介:在访问者模式中,我们使用了一个访问者类,它改变了元素类的执行算法。通过这种方式,元素的执行算法可以随着访问者改变而改变。这种类型的设计模式属于行为型模式。根据模式,元素对象已接受访问者对象,这样访问者对象就可以处理元素对象上的操作。

意图:将数据结构和数据操作分离。

注意:在访问者模式中,一些代码结构和方法名约定俗成。

/**
 *抽象元素类,accept方法表示需要接收的访问者。method是需要执行的操作
 */
public abstract class Data {
	public int[] arr=new int[]{1,2,3,4,5,6,7,8,9};
	public abstract void accept(Operation operation);
	public abstract void method();

}

/**
 *最小值的元素类
 */
class MinData extends Data{

	@Override
	public void accept(Operation operation) {
		operation.visit(this);
		
	}

	@Override
	public void method() {
		  Arrays.sort(arr); 
		  System.err.println("数组的最小值是:"+arr[0]);
	}
	
}

/**
 *最大值的元素类
 */
class MaxData extends Data{

	@Override
	public void accept(Operation operation) {
		operation.visit(this);
		
	}

	@Override
	public void method() {
		  Arrays.sort(arr); 
		  System.err.println("数组的最大值是:"+arr[arr.length-1]);
	}
	
}


/**
 * 抽象的访问者。这里指对数据的操作方式
 * @author admin
 *
 */
interface Operation{
	void visit(MinData minData);
	void visit(MaxData maxData);
	
}

/**
 *定义一个具体的访问者,visit方法根据传入对象的不同而调用不同对象的method方法。
 */
class MyOperation implements Operation{

	@Override
	public void visit(MinData minData) {
		minData.method();
		
	}

	@Override
	public void visit(MaxData maxData) {
		maxData.method();
	}
	
}

主方法:

public class Main {

	public static void main(String[] args) {
		
		//获取数组最小值
		Data data=new MinData();
		//此方法实际调用了MyOperation的visit方法,而visit方法又调用了MinData的method方法。
		//(相当于直接调用了MinData的method方法。)
		data.accept(new MyOperation());
		
		//获取数组最大值
		Data data2=new MaxData();
		data2.accept(new MyOperation());
	}

}

运行结果:

数组的最小值是:1
数组的最大值是:9

参考文章:23种设计模式(9):访问者模式访问者模式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值