• 设计模式(行为模式) 之 访问者模式


    访问者模式目的:

    封装一些施加于某种数据结构元素之上的操作,一旦这些操作需要修改,接受这些操作的数据结构可以保持不变。

    为不同类型的元素提供多种访问操作方式,且可以在不修改原有系统的情况下增加新的操作方式。

    访问者模式的四种角色:

    1,抽象事物功能接口,定义了固定方法及可变功能方法接口;

    2,具体的功能实现类;

    3,访问者接口,为所有访问者对象声明一个 visit 方法,用来代表为对象结构添加的功能,原则上可以代表任意的功能;

    4,具体访问者的实现类,实现要真正被添加到对象结构中的功能。

    举例:(可能不太恰当,但能说明意思)“人,会哭 会笑;还有很多特性如:喜欢、讨厌等”


    /**
    * 人
    */
    public interface Person {
    /**
    * 哭
    */
    void cry();

    /**
    * 笑
    */
    void smile();

    /**
    * 其它
    *
    * @param visitor
    * @return
    */
    Object accept(IVisitor visitor);
    }

    public class ChinaPerson implements Person {
    String name = "";

    public ChinaPerson(String name) {
    this.name = name;
    }

    public String getName() {
    return name;
    }

    @Override
    public void cry() {
    System.out.println(name + " 哭");
    }

    @Override
    public void smile() {
    System.out.println(name + " 笑");
    }

    @Override
    public Object accept(IVisitor visitor) {
    return visitor.visit(this);
    }
    }
    /**
    * 访问者接口
    */
    public interface IVisitor {
    Object visit(ChinaPerson chinaPerson);
    }
    public class Hate implements IVisitor {
    @Override
    public Object visit(ChinaPerson chinaPerson) {
    System.out.println(chinaPerson.getName() + " 讨厌岛国");
    return null;
    }
    }
    public class Like implements IVisitor {
    @Override
    public Object visit(ChinaPerson chinaPerson) {
    System.out.println(chinaPerson.getName() + " 喜欢中国");
    return null;
    }
    }

    执行:
    public static void main(String[] args) {
    ChinaPerson chinaPerson = new ChinaPerson("中国人");
    chinaPerson.cry();
    chinaPerson.smile();
    chinaPerson.accept(new Hate());
    chinaPerson.accept(new Like());
    }
    结果:

    
    
  • 相关阅读:
    一、Git安装
    三、ASP.NET Core 部署Linux 第二篇(Core SDK 3.1)
    .net core 3.1
    一、GitHub创建仓并提交项目
    二、GitHub创建仓并提交项目
    django xdmin使用
    python logging一个通用的使用模板
    一则小脚本(工作中用)
    jmeter 压测最近的心得体会
    jmeter 分布式实战
  • 原文地址:https://www.cnblogs.com/fish-in-sky/p/6540453.html
Copyright © 2020-2023  润新知