Java设计模式 _行为型模式_访问者模式

一、访问者模式

1、访问者模式

访问者模式(Visitor Pattern)是一种行为型模式。它允许在不修改已有类结构的情况下,向类中添加新的操作。访问者模式通过将操作封装在一个访问者对象中,使得可以在不改变各个元素类的前提下,实现对元素的新操作。

2、实现思路

被访问者(元素对象),访问者;

被访问者需要关联到访问者;访问者实现被访问者的方法;

(1)、定义被访问者规范(绑定到访问者中,和其他自身行为)(水果)

(2)、编写被访问者实现类,实现绑定和规范行为(苹果,葡萄)

(3)、编写访问者规范(每一种被访问者的访问方法)(商店)

(4)、编写访问者的实现类,实现访问的具体方法(水果商店)

(5)、实例化被访问者,实例化访问者,被访问者绑定到访问者中

二、代码示例

1、示例场景

水果商店添加水果,添加新的水果,不用修改之前的水果信息和绑定信息
2、代码示例

java 复制代码
// 1、定义被访问者规范(水果)
public interface Fruit {
    void accept(Shop shop);     // 定义绑定关系
    void info();
}
// 2.1、定义被访问者实现类(苹果)
public class Apple implements Fruit {
    @Override
    public void accept(Shop shop) {
        shop.visit(this);   // 实现访问者绑定被访问者
    }

    @Override
    public void info() {
        System.out.println("苹果");
    }
}
// 2.2、定义被访问者实现类(葡萄)
public class Garpe implements Fruit {
    @Override
    public void accept(Shop shop) {
        shop.visit(this);  // 实现访问者绑定被访问者
    }

    @Override
    public void info() {
        System.out.println("葡萄");
    }
}
// 3、编写访问者规范
public interface Shop {
    void visit(Garpe garpe);   // 通过绑定访问被访问者葡萄
    void visit(Apple apple);  // 通过绑定访问被访问者苹果
}
// 4、编写访问者实现类,水果商店
public class FruitShop implements Shop {
    @Override
    public void visit(Garpe garpe) {
        System.out.println("添加了新水果!" );
        garpe.info();
    }

    @Override
    public void visit(Apple apple) {
        System.out.println("添加了新水果!" );
        apple.info();
    }
}

// 5、测试
 public static void main(String[] args) {
        Fruit apple = new Apple();   // 被观察者
        Garpe garpe = new Garpe();
        Shop shop = new FruitShop();   // 观察者
        apple.accept(shop);    // 被观察者被观察者观察
        garpe.accept(shop);
    }

总结:

访问者模式,主要包含访问者和被访问者两种角色的实体,两者之间相互关联,被访问者依附于访问者,访问者可以访问被访问者的方法。

学海无涯苦作舟!!!

相关推荐
砚底藏山河1 小时前
容错重试与指数退避:网络抖动手抖不再丢数据(魔码量化实战 #04)
java·数据库·python·金融
2501_930472442 小时前
云安全自查清单:用腾讯云助手 30 分钟完成一次权限与密钥体检
java·腾讯云
letisgo52 小时前
JAVA 高级进阶05篇《Spring容器机制:Bean生命周期与三级缓存全解》
java·spring·面试·ioc·源码分析
岁月如歌77862 小时前
分布式锁完全指南:从数据库到 Redisson 的演进
java·后端·架构
AI深栈2 小时前
第 8 章 · Tool Calling 与 Tool Search
java·人工智能
写后端的胖头鱼2 小时前
【高频面试题】spring事物失效场景(带原理 + 代码示例)
java·后端·spring·事务·事物失效
小孩玩什么2 小时前
深入理解字符串匹配算法:BF算法,KMP算法
java·c语言·开发语言·数据结构·c++·算法
feiyu_gao2 小时前
Cocreation Framework:一套给所有人的 AI 协作思考系统
设计模式·aigc·ai编程
长谷深风1112 小时前
Agent执行系统中的身份与版本设计
java·大数据·人工智能·ai·大模型·task·aiagent
Wang's Blog2 小时前
Java框架快速入门: Spring Security+OAuth2之UserDetails与JDBC认证实践
java·网络·spring