徒手撸设计模式-访问者模式
作者:互联网
概念
在访问者模式(Visitor Pattern)中,我们使用了一个访问者类,它改变了元素类的执行算法。通过这种方式,元素的执行算法可以随着访问者改变而改变。这种类型的设计模式属于行为型模式。根据模式,元素对象已接受访问者对象,这样访问者对象就可以处理元素对象上的操作。
参考链接: https://www.runoob.com/design-pattern/visitor-pattern.html
代码案例
电脑部件接口-接收电脑部件访问者
/** * 电脑部件接口 */ public interface ComputerPart { public String accept(ComputerPartVisitor computerPartVisitor); }
电脑部件访问者接口,提供四个部件访问
/** * 访问者接口 */ public interface ComputerPartVisitor { String visit(Computer computer); String visit(Mouse mouse); String visit(Keyboard keyboard); String visit(Monitor monitor); }
电脑部件实现类
鼠标
/** * 鼠标 */ public class Mouse implements ComputerPart { @Override public String accept(ComputerPartVisitor computerPartVisitor) { return computerPartVisitor.visit(this); } }
显示器
/** * 显示器 */ public class Monitor implements ComputerPart { @Override public String accept(ComputerPartVisitor computerPartVisitor) { return computerPartVisitor.visit(this); } }
键盘
/** * 键盘 */ public class Keyboard implements ComputerPart { @Override public String accept(ComputerPartVisitor computerPartVisitor) { return computerPartVisitor.visit(this); } }
电脑
/** * 电脑 统一访问入口 */ public class Computer implements ComputerPart { ComputerPart[] computerParts; public Computer() { computerParts = new ComputerPart[]{new Monitor(),new Mouse(),new Keyboard()}; } @Override public String accept(ComputerPartVisitor computerPartVisitor) { for (ComputerPart computerPart : computerParts) { computerPart.accept(computerPartVisitor); } return computerPartVisitor.visit(this); } }
电脑部件访问实现类
/** * 电脑部件访问实现类 */ @Slf4j public class ComputerPartDisplayVisitor implements ComputerPartVisitor { @Override public String visit(Computer computer) { log.info("访问电脑---"); return "Displaying Computer."; } @Override public String visit(Mouse mouse) { log.info("访问电脑鼠标---"); return "Displaying Mouse."; } @Override public String visit(Keyboard keyboard) { log.info("访问电脑键盘---"); return "Displaying Keyboard."; } @Override public String visit(Monitor monitor) { log.info("访问电脑显示器---"); return "Displaying Monitor."; } }
测试主类
/** * 设计模式控制器 */ @RestController @RequestMapping("/designPattern") @Slf4j public class DesignController { @Autowired private ApplicationContext applicationContext; @GetMapping("/visitor") public ResponseModel visitor() throws Exception { log.info("visitor ---- start "); Computer computer= new Computer(); ComputerPartDisplayVisitor computerPartDisplayVisitor = new ComputerPartDisplayVisitor(); computer.accept(computerPartDisplayVisitor); log.info("visitor ---- end "); return new ResponseModel("访问者模式完成", 200, null); } }
测试案例
2022-07-02 18:36:44.306 INFO visitor ---- start 【http-nio-8081-exec-2】【DesignController:88】 2022-07-02 18:36:53.528 INFO 访问电脑显示器--- 【http-nio-8081-exec-2】【ComputerPartDisplayVisitor:28】 2022-07-02 18:36:53.537 INFO 访问电脑鼠标--- 【http-nio-8081-exec-2】【ComputerPartDisplayVisitor:16】 2022-07-02 18:36:53.539 INFO 访问电脑键盘--- 【http-nio-8081-exec-2】【ComputerPartDisplayVisitor:22】 2022-07-02 18:36:53.541 INFO 访问电脑--- 【http-nio-8081-exec-2】【ComputerPartDisplayVisitor:10】 2022-07-02 18:36:57.802 INFO visitor ---- end 【http-nio-8081-exec-2】【DesignController:94】
标签:String,电脑,访问者,visit,computerPartVisitor,设计模式,public,徒手 来源: https://www.cnblogs.com/hikoukay/p/16438189.html