主页传送门: 传送
访问者模式(Visitor Pattern),是一种相对简单的设计模式。其定义如下:
Represent an operation to be performed on the elements of an object structure. Visitor lets you define a new operation without changing the classes of the elements on which it operates.
即:封装一些作用于某种数据结构中的各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作。
其通用类图如下:
访问者模式涉及到的角色如下:
使用访问者模式完成对计算机各个硬件的访问。
创建硬件抽象类
public abstract class Hardware {
String type ;//型号
//构造器
public Hardware(String type )
{
this.type = type;
}
public String getType()
{return this.type;}
//运转
public abstract void run();
//接受计算机的访问者
public abstract void accept(ComputerVisitor computerVisitor);
}
创建具体硬件
CPU
public class CPU extends Hardware {
public CPU(String type) {
super(type);
}
@Override
public void run() {
System.out.println("型号为"+type+"的CPU正在运行...");
}
@Override
public void accept(ComputerVisitor computerVisitor) {
computerVisitor.visitCPU(this);
}
}
硬盘
public class HardDisk extends Hardware {
public HardDisk(String type) {
super(type);
}
@Override
public void run() {
System.out.println("型号为"+type+"的硬盘正在运行...");
}
@Override
public void accept(ComputerVisitor computerVisitor) {
computerVisitor.visitHardDisk(this);
}
}
创建电脑访问者抽象类
public interface ComputerVisitor {
void visitCPU(CPU cpu);//访问CPU
void visitHardDisk(HardDisk hardDisk);//访问硬盘
}
创建电脑访问者的具体实现类
public class RunVisitor implements ComputerVisitor {
@Override
public void visitCPU(CPU cpu) {
cpu.run();
}
@Override
public void visitHardDisk(HardDisk hardDisk) {
hardDisk.run();
}
}
public class TypeVisitor implements ComputerVisitor {
@Override
public void visitCPU(CPU cpu) {
System.out.println("CPU型号:"+cpu.getType());
}
@Override
public void visitHardDisk(HardDisk hardDisk) {
System.out.println("硬盘型号:"+hardDisk.getType());
}
}
创建电脑类
public class Computer {
private Hardware cpu;
private Hardware hardDisk;
public Computer()
{
this.cpu = new CPU("Tntel Core i7-620");
this.hardDisk = new HardDisk("Seagate 500G 7200转");
}
public void accept(ComputerVisitor computerVisitor)
{
cpu.accept(computerVisitor);
hardDisk.accept(computerVisitor);
}
}
创建测试类
public class Client {
public static void main(String[] args) {
Computer computer = new Computer();
//类型访问者
ComputerVisitor typeVisitor = new TypeVisitor();
//运行的硬件访问者
ComputerVisitor runVisitor = new RunVisitor();
computer.accept(typeVisitor);
System.out.println("-------------------------");
computer.accept(runVisitor);
}
}
访问者模式的优点主要包括:
访问者模式的缺点主要包括:
访问者模式适用于以下场景:
访问者模式是一种行为型设计模式,它将数据结构与数据操作分离,使得在不改变数据结构的前提下可以定义作用于这些元素的新的操作。该模式主要针对系统中拥有固定类型数的对象结构,在其内提供一个accept()方法来接受访问者对象的访问。不同的访问者对同一个元素的访问内容是不同的,使得相同的元素集合可以产生不同的数据结果。
总的来说,访问者模式适用于数据结构相对稳定,而操作易于变化的情况。在使用时,需要根据实际需求权衡利弊,注意避免违反设计原则的问题。同时,访问者模式也需要根据具体的应用场景来进行选择和设计,以满足系统的需求和变化。
如果喜欢的话,欢迎 关注 点赞 评论 收藏 一起讨论
你的支持就是我✍️创作的动力!