訪問者模式
http://blog.csdn.net/chenssy/article/details/12029633
https://wizardforcel.gitbooks.io/design-pattern-lessons/content/lesson28.html
http://www.cnblogs.com/java-my-life/archive/2012/06/14/2545381.html
這個模式好難啊,似乎也沒有什麼應用的場景.
先記錄一下吧。
https://wizardforcel.gitbooks.io/design-pattern-lessons/content/lesson28.html
http://www.cnblogs.com/java-my-life/archive/2012/06/14/2545381.html
這個模式好難啊,似乎也沒有什麼應用的場景.
先記錄一下吧。
- import java.util.ArrayList;
- import java.util.List;
- public class Test {
- public static void main(String[] args) {
- // 建立一個結構物件
- ObjectStructure os = new ObjectStructure();
- // 給結構增加一個節點
- os.add(new NodeA());
- // 給結構增加一個節點
- os.add(new NodeB());
- // 建立一個訪問者
- Visitor visitor = new VisitorA();
- os.action(visitor);
- }
- }
- interface Visitor {
- /**
- * 對應於NodeA的訪問操作
- */
- public void visit(NodeA node);
- /**
- * 對應於NodeB的訪問操作
- */
- public void visit(NodeB node);
- }
- class VisitorA implements Visitor {
- /**
- * 對應於NodeA的訪問操作
- */
- @Override
- public void visit(NodeA node) {
- System.out.println(node.operationA());
- }
- /**
- * 對應於NodeB的訪問操作
- */
- @Override
- public void visit(NodeB node) {
- System.out.println(node.operationB());
- }
- }
- class VisitorB implements Visitor {
- /**
- * 對應於NodeA的訪問操作
- */
- @Override
- public void visit(NodeA node) {
- System.out.println(node.operationA());
- }
- /**
- * 對應於NodeB的訪問操作
- */
- @Override
- public void visit(NodeB node) {
- System.out.println(node.operationB());
- }
- }
- abstract class Node {
- /**
- * 接受操作
- */
- public abstract void accept(Visitor visitor);
- }
- class NodeA extends Node {
- /**
- * 接受操作
- */
- @Override
- public void accept(Visitor visitor) {
- visitor.visit(this);
- }
- /**
- * NodeA特有的方法
- */
- public String operationA() {
- return "NodeA";
- }
- }
- class NodeB extends Node {
- /**
- * 接受方法
- */
- @Override
- public void accept(Visitor visitor) {
- visitor.visit(this);
- }
- /**
- * NodeB特有的方法
- */
- public String operationB() {
- return "NodeB";
- }
- }
- class ObjectStructure {
- private List<Node> nodes = new ArrayList<Node>();
- /**
- * 執行方法操作
- */
- public void action(Visitor visitor) {
- for (Node node : nodes) {
- node.accept(visitor);
- }
- }
- /**
- * 新增一個新元素
- */
- public void add(Node node) {
- nodes.add(node);
- }
- }
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29254281/viewspace-2135993/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 行為模式-訪問者模式模式
- 設計模式:訪問者模式設計模式
- 設計模式(十六)——訪問者模式設計模式
- 極簡設計模式-訪問者模式設計模式
- JAVA設計模式之訪問者模式Java設計模式
- 設計模式解密(22)- 訪問者模式設計模式解密
- PHP設計模式之訪問者模式PHP設計模式
- 深入淺出訪問者模式模式
- python-訪問者模式Python模式
- 設計模式學習之訪問者模式設計模式
- 設計模式 - ASM 中的訪問者模式設計模式ASM
- 【趣味設計模式系列】之【訪問者模式】設計模式
- C#設計模式之訪問者模式C#設計模式
- 23種設計模式之訪問者模式設計模式
- DesignPattern_訪問者模式_19模式
- 15.java設計模式之訪問者模式Java設計模式
- 18、Python與設計模式–訪問者模式Python設計模式
- 設計模式(二十三)訪問者設計模式
- 設計模式(二十):訪問者模式、迭代器模式、觀察者模式、原型模式、模板方法設計模式原型
- Java進階篇設計模式之十 ---- 訪問者模式和中介者模式Java設計模式
- C#設計模式系列:訪問者模式(Visitor)C#設計模式
- 設計模式--訪問者模式Visitor(行為型)設計模式
- JAVA設計模式之 訪問者模式【Visitor Pattern】Java設計模式
- 「補課」進行時:設計模式(18)——訪問者模式設計模式
- 設計模式學習-使用go實現訪問者模式設計模式Go
- 設計模式的征途—16.訪問者(Visitor)模式設計模式
- Android理解設計模式之組合模式、迭代器模式、訪問者模式Android設計模式
- Java實現在訪問者模式中使用反射Java模式反射
- 操作複雜物件結構——訪問者模式(四)物件模式
- 操作複雜物件結構——訪問者模式(三)物件模式
- 操作複雜物件結構——訪問者模式(二)物件模式
- 軟體設計模式學習(二十七)訪問者模式設計模式
- 軟體設計模式系列之二十五——訪問者模式設計模式
- 聊聊OOP中的設計原則以及訪問者模式OOP模式
- 訪問者(Visitor)
- 設計模式學習筆記(二十一)訪問者模式及其實現設計模式筆記
- 【設計模式】詳解訪問者(Visitor)模式-有多段程式碼出沒設計模式
- 訪問者模式討論篇:java的動態繫結與雙分派模式Java