/** * 訪問者模式 * @author TMAC-J * 在客戶端和元素之間添加一個訪問者 * 當你需要添加一些和元素關係不大的需求時,可以直接放在訪問者裡面 * 或者是元素之間有一些公共的代碼塊,你可以把它放在訪問者裡面,就不用寫重覆代碼了 * 適用於元素數據基本不變,操作不斷變化的場景 * ... ...
/** * 訪問者模式 * @author TMAC-J * 在客戶端和元素之間添加一個訪問者 * 當你需要添加一些和元素關係不大的需求時,可以直接放在訪問者裡面 * 或者是元素之間有一些公共的代碼塊,你可以把它放在訪問者裡面,就不用寫重覆代碼了 * 適用於元素數據基本不變,操作不斷變化的場景 * 可以不改變元素類,只改變訪問者類,個人覺得這個訪問者類相當於一個管理器 * 和迭代子模式的區別是迭代子模式主要是針對於一個聚合,其提供的最主要功能是遍歷 * 訪問者是針對某個元素,情況是元素結構不變,操作多變的情況 * 其實設計模式不用這麼死板,只要符合開閉等這些設計模式原則就可以 */ public class VisitorPattern { interface Element{ void doSomething(); void accept(IVisitor visitor); } public class ConcreteElement implements Element{ @Override public void doSomething() { System.out.println("這是具體元素!"); } @Override public void accept(IVisitor visitor) { visitor.visit(this); } } interface IVisitor{ void visit(Element element); } public class ConcreteVisitor implements IVisitor{ @Override public void visit(Element element) { element.doSomething(); } } public void test(){ IVisitor visitor = new ConcreteVisitor(); visitor.visit(new ConcreteElement()); } }