/* * $Id$ * * Copyright (c) 2004 by Rodney Kinney * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License (LGPL) as published by the Free Software Foundation. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, copies are available * at http://www.opensource.org. */ package VASSAL.counters; /** * For implementing a modified Visitor pattern on {@link GamePiece}s. * Rather than defining accept() methods in the GamePiece subclasses, * this class performs the dispatching of visitors. This allows for easier * implementation of custom GamePiece subclasses outside the core engine. * * A class that wishes to recognize custom GamePiece classes and treat * them specially should do so by implementing a sub-interface of * PieceVisitor and using a subclass of PieceVisitorDispatcher * that recognizes the custom type. * @see DeckVisitor * @see DeckVisitorDispatcher */ public class PieceVisitorDispatcher { private PieceVisitor visitor; public PieceVisitorDispatcher(PieceVisitor visitor) { this.visitor = visitor; } public Object accept(GamePiece piece) { Object value = null; if (piece instanceof Stack) { value = visitor.visitStack((Stack) piece); } else { value = visitor.visitDefault(piece); } return value; } }