本文源码:GitHub·点这里 || GitEE·点这里

一、生活场景

1、场景描述

电竞是游戏比赛达到“竞技”层面的体育项目。利用电子设备作为运动器械进行的、人与人之间的智力对抗运动。通过电竞,可以提高人的反应能力、协调能力、团队精神等。但是不同人群的对电竞的持有的观念不一样,有的人认为电竞就是沉迷网络,持反对态度,而有的人就比较赞同。下面基于访问者模式来描述该场景。

2、场景图解

3、代码实现

public class C01_InScene {     public static void main(String[] args) {         DataSet dataSet = new DataSet() ;         dataSet.addCrowd(new Youth());         dataSet.addCrowd(new MiddleAge());         CrowdView crowdView = new Against() ;         dataSet.display(crowdView);         crowdView = new Approve() ;         dataSet.display(crowdView);     } } /**  * 双分派,不同人群管理  */ abstract class Crowd {     abstract void accept(CrowdView action); } class Youth extends Crowd {     @Override     public void accept(CrowdView view) {         view.getYouthView(this);     } } class MiddleAge extends Crowd {     @Override     public void accept(CrowdView view) {         view.getMiddleAgeView (this);     } } /**  * 不同人群观念的管理  */ abstract class CrowdView {     // 青年人观念     abstract void getYouthView (Youth youth);     // 中年人观念     abstract void getMiddleAgeView (MiddleAge middleAge); } class Approve extends CrowdView {     @Override     public void getYouthView(Youth youth) {         System.out.println("青年人赞同电竞");     }     @Override     public void getMiddleAgeView(MiddleAge middleAge) {         System.out.println("中年人赞同电竞");     } } class Against extends CrowdView {     @Override     public void getYouthView(Youth youth) {         System.out.println("青年人反对电竞");     }     @Override     public void getMiddleAgeView(MiddleAge middleAge) {         System.out.println("中年人反对电竞");     } } /**  * 提供一个数据集合  */ class DataSet {     private List<Crowd> crowdList =