设计者模式之访问者模式

目录

1.访问者模式概述

2.访问者模式的组成部分

1)Visitor(访问者)

2)Element(元素)

3)ConcreteElement(具体元素)

4)ObjectStructure(对象结构)

3.举个栗子

流程

4.代码实现

1)  USBPlug类

2)UsbPort类

3)电脑类

4)鼠标类

5)visitor测试类

附录:

1)23种设计模式讲解地址

2)23种设计模式源码下载地址:


1.访问者模式概述

        允许你在不改变对象结构中的元素类的前提下,向对象结构中的元素增加新的行为。这种模式将数据结构与作用于结构上的操作分离,从而使得我们可以独立地改变数据结构和操作


2.访问者模式的组成部分

1)Visitor(访问者)

        定义了一个访问每个元素的接口,包含多个访问方法,每个方法对应一种具体的元素类型。


2)Element(元素)

        定义了一个接受(accept)操作,它以一个访问者为参数。


3)ConcreteElement(具体元素)

        实现了Element接口提供的accept操作。
        每个具体元素都实现了自己的业务逻辑。


4)ObjectStructure(对象结构)


        包含一个或多个元素对象。
        提供一个高层接口,允许访问者访问这些元素。

3.举个栗子

小久玩英雄联盟的时候,使用电脑自带触摸板控制角色移动特别不爽,于是买了一个鼠标,通过笔记本电脑的usb接口插入鼠标的插头,不通过笔记本自带的触摸板玩游戏,通过鼠标玩游戏(visitor),玩的特别舒服.

注:控制鼠标移动不是通过笔记本的触摸面板(ObjectStructure),而是通过外部的鼠标(visitor)进行移动.

主要部分:

        英雄联盟:这是访问者模式的元素类,它定义了接受访问者访问的方法。
        屏幕上的鼠标:这是访问者模式的访问者类,它定义了访问元素的方法。
        电脑:这是访问者模式的对象结构,它包含元素和访问者。
        通过这种方式,访问者模式允许在不改变类层次结构的情况下,为一组类添加新的行为。

流程

鼠标==>鼠标插头==》通过usb接口连接电脑===>访问控制电脑屏幕中的鼠标

4.代码实现

1)  USBPlug类

        这段代码定义了一个名为 USBPlug 的接口,用于表示 USB 插头。接口中定义了一个方法 acceptUsb,用于让计算机使用该 USB 插头。

package org.xiji.visitor3;

/**
 * USB插头
 */
public interface USBPlug {
    /**
     * 定义电脑的UsePort
     */
    public void acceptUsb(Computer usbPort);

}

2)UsbPort类

        这段代码定义了一个名为 UsbPort 的接口,用于表示 USB 接口。接口中定义了一个方法 acceptUsb,用于让 USB 接口接受一个 USBPlug 插头。

package org.xiji.visitor3;

/**
 * Usb接口 相当于元素接口
 */
public interface UsbPort {

    /**
     * 接受UsbPlug插头
     */
    public void acceptUsb(USBPlug usbPlug);
}

3)电脑类

        这段代码定义了一个 Computer 类,该类实现了 UsbPort 接口,并重写了 acceptUsb 方法。此外,还定义了一个 moveMouse 方法,用于模拟鼠标移动的操作

package org.xiji.visitor3;

public class Computer implements UsbPort{
    @Override
    public void acceptUsb(USBPlug usbPlug) {
        usbPlug.acceptUsb(this);
    }
    public String moveMouse() {
        System.out.println("鼠标移动了");
        return "鼠标";
    }
}

4)鼠标类

        这段代码定义了一个 Mouse 类,该类实现了 USBPlug 接口,并重写了 acceptUsb 方法。Mouse 类用于模拟鼠标插入 USB 接口的行为,并调用 Computer 类中的 moveMouse 方法来模拟鼠标的移动。

package org.xiji.visitor3;

/**
 * 电脑鼠标插入usb接口
 */
public class Mouse implements USBPlug{
    @Override
    public void acceptUsb(Computer usbPort) {
        System.out.println("鼠标插入usb接口");

        System.out.println("Mouse正在移动"+ usbPort.moveMouse());
    }
}

5)visitor测试类

        这段代码定义了一个 Visitor3Main 类,用于演示如何将鼠标插入电脑并通过 USB 接口进行交互。

package org.xiji.visitor3;

public class Visitor3Main {
    public static void main(String[] args) {
        /**
         * 一台电脑
         */
        Computer computer = new Computer();
        /**
         * 新买的鼠标
         */
        Mouse mouse = new Mouse();
        /**
         * 鼠标插入到电脑,并且开始游戏
         */
        computer.acceptUsb(mouse);
    }
}

6)运行结果

附录:

1)23种设计模式讲解地址

23种设计模式讲解地址

专题地址:https://blog.csdn.net/2301_76862031/category_12779841.html


 设计模式之访问者模式地址:  https://blog.csdn.net/2301_76862031/article/details/141716629

 设计模式之简单工厂模式地址: https://blog.csdn.net/2301_76862031/article/details/141641161
 设计模式之策略模式工厂地址:https://blog.csdn.net/2301_76862031/article/details/141647304

设计模式之备忘录模式地址:     https://blog.csdn.net/2301_76862031/article/details/141678153
 
 设计模式之代理模式: https://blog.csdn.net/2301_76862031/article/details/141681834
 
 设计模式之单例模式: https://blog.csdn.net/2301_76862031/article/details/141684340
 
 设计模式之迭代器模式: https://blog.csdn.net/2301_76862031/article/details/141690379
 
 设计模式之观察者模式:https://blog.csdn.net/2301_76862031/article/details/141723684
 
 设计模式之命令模式: https://blog.csdn.net/2301_76862031/article/details/141728371
 
 设计模式之模板方法模式: https://blog.csdn.net/2301_76862031/article/details/141729898
 
 设计模式之桥接模式: https://blog.csdn.net/2301_76862031/article/details/141748997
 
 设计模式之适配器模式: https://blog.csdn.net/2301_76862031/article/details/141752130
 
 设计模式之外观模式: https://blog.csdn.net/2301_76862031/article/details/141753019

设计模式之享元模式: https://blog.csdn.net/2301_76862031/article/details/141755905
 
 设计模式之原型模式: https://blog.csdn.net/2301_76862031/article/details/141759296
 
 设计模式之责任链模式: https://blog.csdn.net/2301_76862031/article/details/141760704

 设计模式之中介模式: https://blog.csdn.net/2301_76862031/article/details/141777728
 
 设计模式之装饰者模式: https://blog.csdn.net/2301_76862031/article/details/141784167
 
 设计模式之状态模式: https://blog.csdn.net/2301_76862031/article/details/141786766
 
 设计模式之组合模式: https://blog.csdn.net/2301_76862031/article/details/141787708
 
 设计模式之工厂方法模式: https://blog.csdn.net/2301_76862031/article/details/141826862
 
 设计模式之解释器模式: https://blog.csdn.net/2301_76862031/article/details/141859953
 

2)23种设计模式源码下载地址:

java23种设计模式的实现代码(): 23种设计模式的实现使用java,并且均已经通过测试

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值