visitor-访问模式
生活随笔
收集整理的這篇文章主要介紹了
visitor-访问模式
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
解決問題
采用“雙重委派”方式,使訪問者和被訪問對象進行隔離。有點難理解。。。。
應(yīng)用場景
它有一定的應(yīng)用局限性,訪問者和被訪問者應(yīng)該可被枚舉,結(jié)構(gòu)相對固定。比如說:運算符處理與數(shù)據(jù)結(jié)構(gòu)的關(guān)系。(運算符+-*/可枚舉,類型如String, int ,Object也是可以枚舉的)
原理
示例
我們以處理運算表達式為例,來寫個例子,只涉及+-,類型只涉及int,float, double。
public interface Element {public void accept(Visitor visitor); }@AllArgsConstructor @Data public class DoubleElement implements Element {private double left;private double right;@Overridepublic void accept(Visitor visitor) {visitor.cal(this);} }@AllArgsConstructor @Data public class FloatElement implements Element {private int left;private int right;@Overridepublic void accept(Visitor visitor) {visitor.cal(this);} } @AllArgsConstructor @Data public class IntElement implements Element {private int left;private int right;@Overridepublic void accept(Visitor visitor) {visitor.cal(this);} } public interface Visitor {public void cal(DoubleElement element);public void cal(FloatElement element);public void cal(IntElement element); }public class MinusVisitor implements Visitor {public void cal(DoubleElement element) {System.out.print(element.getLeft()+ "-"+ element.getRight()+ "="+ (element.getLeft() - element.getRight()));}public void cal(FloatElement element) {System.out.print(element.getLeft()+ "-"+ element.getRight()+ "="+ (element.getLeft() + element.getRight()));}public void cal(IntElement element) {System.out.print(element.getLeft()+ "-"+ element.getRight()+ "="+ (element.getLeft() - element.getRight()));} } public class PlusVisitor implements Visitor {public void cal(DoubleElement element) {System.out.print(element.getLeft()+ "+"+ element.getRight()+ "="+ (element.getLeft() + element.getRight()));}public void cal(FloatElement element) {System.out.print(element.getLeft()+ "+"+ element.getRight()+ "="+ (element.getLeft() + element.getRight()));}public void cal(IntElement element) {System.out.print(element.getLeft()+ "+"+ element.getRight()+ "="+ (element.getLeft() + element.getRight()));} }public class Client {public static void main(String[] args) {DoubleElement doubleElement = new DoubleElement(10.21, 3.14);IntElement intElement = new IntElement(45, 21);PlusVisitor plusVisitor = new PlusVisitor();MinusVisitor minusVisitor = new MinusVisitor();doubleElement.accept(plusVisitor);intElement.accept(plusVisitor);intElement.accept(minusVisitor);} } 復(fù)制代碼參考
https://en.wikipedia.org/wiki/Visitor_pattern
總結(jié)
以上是生活随笔為你收集整理的visitor-访问模式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Scala谜题】继承
- 下一篇: Python常见十六个错误集合,你知道那