展开
拓展 关闭
订阅号推广码
GitHub
视频
公告栏 关闭

访问者模式解决测评系统问题

  • 解决方案
将人分为男人和女人,对歌手进行测评,当看完某个歌手表演后,得到他们对该歌手不同的评价(评价 有不同的种类,比如 成功、失败 等),请使用访问者模式来说实现

  • 代码实现
package com.atguigu.visitor;
public abstract class Person {
	//提供一个方法,让访问者可以访问
	public abstract void accept(Action action);
}

package com.atguigu.visitor;
public class Man extends Person {

	@Override
	public void accept(Action action) {
		// TODO Auto-generated method stub
		action.getManResult(this);
	}

}

package com.atguigu.visitor;
//说明
//1. 这里我们使用到了双分派, 即首先在客户端程序中,将具体状态作为参数传递Woman中(第一次分派)
//2. 然后Woman 类调用作为参数的 "具体方法" 中方法getWomanResult, 同时将自己(this)作为参数
//   传入,完成第二次的分派
public class Woman extends Person{

	@Override
	public void accept(Action action) {
		// TODO Auto-generated method stub
		action.getWomanResult(this);
	}

}

package com.atguigu.visitor;
public abstract class Action {
	//得到男性 的测评
	public abstract void getManResult(Man man);
	//得到女的 测评
	public abstract void getWomanResult(Woman woman);
}

package com.atguigu.visitor;
public class Success extends Action {

	@Override
	public void getManResult(Man man) {
		// TODO Auto-generated method stub
		System.out.println(" 男人给的评价该歌手很成功 !");
	}

	@Override
	public void getWomanResult(Woman woman) {
		// TODO Auto-generated method stub
		System.out.println(" 女人给的评价该歌手很成功 !");
	}

}

package com.atguigu.visitor;
public class Fail extends Action {

	@Override
	public void getManResult(Man man) {
		// TODO Auto-generated method stub
		System.out.println(" 男人给的评价该歌手失败 !");
	}

	@Override
	public void getWomanResult(Woman woman) {
		// TODO Auto-generated method stub
		System.out.println(" 女人给的评价该歌手失败 !");
	}

}

package com.atguigu.visitor;
public class Client {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//创建ObjectStructure
		ObjectStructure objectStructure = new ObjectStructure();
		objectStructure.attach(new Man());
		objectStructure.attach(new Woman());
		//成功
		Success success = new Success();
		objectStructure.display(success);
		System.out.println("===============");
		Fail fail = new Fail();
		objectStructure.display(fail);
	}

}
posted @ 2022-08-31 22:57  DogLeftover  阅读(14)  评论(0编辑  收藏  举报