Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- interface IConfigurationElement {
- void acceptVisitor(IConfigurationElementVisitor visitor);
- }
- interface Visitable {
- void accept(Object visitor);
- }
- interface AVisitor {
- void visitA(A a);
- }
- interface BVisitor {
- void visitB(B b);
- }
- interface CVisitor {
- void visitB(C c);
- }
- class C implements Visitable {
- public void accept(Object visitor) {
- if (visitor instanceof CVisitor) {
- ((BVisitor)vistor).visitC(this);
- }
- }
- }
- class B implements Visitable {
- public void accept(Object visitor) {
- if (visitor instanceof BVisitor) {
- ((BVisitor)vistor).visitB(this);
- }
- }
- }
- class A extends B implements Visitable {
- public void accept(Object visitor) {
- super.accept(visitor);
- if (visitor instanceof AVisitor) {
- ((AVisitor)vistor).visitA(this);
- }
- }
- }
- class PrintBs implements BVisitor {
- public void visitB(B b) {
- system.out.println(b);
- }
- }
- class PrintAs implements AVisitor {
- public void visitA(A a) {
- system.out.println(a);
- }
- }
- class PrintCs implements CVisitor {
- public void visitC(C c) {
- system.out.println(c);
- }
- }
- class PrintAsAndCs implements CVisitor, AVisitor{
- public void visitA(A a) {
- system.out.println(a);
- }
- public void visitC(C c) {
- system.out.println(c);
- }
- }
- class ConfigurationElementA implements IConfigurationElement, ICommittable {
- }
- class ConfigurationElementB implements IConfigurationElement, IVerifiable {
- }
- class Visitor {
- void accept(IConfigurationElement element) {
- if (element instanceof ICommittable) {
- // ...
- }
- // Note: not a chain of instanceofs.
- if (element instanceof IVerifiable) {
- // ...
- }
- }
- }
- interface AOrB {
- <Result> Result accept(AOrBVisitor<Result> visitor);
- interface AOrBVisitor<Result> {
- Result visit(A a);
- Result visit(B b);
- }
- }
- interface ThisCouldBeOfTypeB {
- <Result> Result accept(ThisCouldBeOfTypeBVisitor<Result> visitor);
- interface ThisCouldBeOfTypeBVisitor<Result> {
- Result visit(B b);
- Result visit(ThisCouldBeOfTypeB visitable);
- }
- }
- class A implements AOrB, ThisCouldBeOfTypeBVisitor {...}
- class B implements AOrB, ThisCouldBeOfTypeBVisitor {...}
- class C implements ThisCouldBeOfTypeBVisitor {...}
Add Comment
Please, Sign In to add comment