设计模式学习—访问者模式(Visitor Design Pattern)

xiaoxiao2021-02-28  70

一、我的理解

访问者模式允许外部类来改变本类的行为。本类会依据“访问”的外部类的类型不同而做出相应的反应。

二、实现方式

主体类提供对外接口,允许访客调用,而对于访客规定统一接口,执行不同的方法。

三、实例

Java实例
ComputerPart接口:规定主体类统一的对外接口 package com.study.dp.visitor; public interface ComputerPart { public void accept(ComputerPartVisitor computerPartVisitor); } ComputerPartVisitor接口:规定访客的统一行为 package com.study.dp.visitor; public interface ComputerPartVisitor { public void visit(Computer computer); public void visit(Mouse mouse); public void visit(Keyboard keyboard); public void visit(Monitor monitor); } Keyboard类:被访问主体一 package com.study.dp.visitor; public class Keyboard implements ComputerPart { @Override public void accept(ComputerPartVisitor computerPartVisitor) { computerPartVisitor.visit(this); } } Monitor类:被访问主体二 package com.study.dp.visitor; public class Monitor implements ComputerPart { @Override public void accept(ComputerPartVisitor computerPartVisitor) { computerPartVisitor.visit(this); } } Mouse类:可以被访问的主体三 package com.study.dp.visitor; public class Mouse implements ComputerPart { @Override public void accept(ComputerPartVisitor computerPartVisitor) { computerPartVisitor.visit(this); } } Computer类:可以被访问的主体四 package com.study.dp.visitor; public class Computer implements ComputerPart { ComputerPart[] parts; public Computer() { parts = new ComputerPart[] {new Mouse(), new Keyboard(), new Monitor()}; } @Override public void accept(ComputerPartVisitor computerPartVisitor) { for (int i = 0; i < parts.length; i++) { parts[i].accept(computerPartVisitor); } computerPartVisitor.visit(this); } } ComputerPartDisplayVisitor类:实际的访客 package com.study.dp.visitor; public class ComputerPartDisplayVisitor implements ComputerPartVisitor { @Override public void visit(Computer computer) { System.out.println("Displaying Computer."); } @Override public void visit(Mouse mouse) { System.out.println("Displaying Mouse."); } @Override public void visit(Keyboard keyboard) { System.out.println("Displaying Keyboard."); } @Override public void visit(Monitor monitor) { System.out.println("Displaying Monitor."); } } Demo类:测试类 package com.study.dp.visitor; public class Demo { public static void main(String[] args) { ComputerPart computer = new Computer(); computer.accept(new ComputerPartDisplayVisitor()); } }

四、应用场景

转载请注明原文地址: https://www.6miu.com/read-20509.html

最新回复(0)