RSS Feed for This PostCurrent Article

Design Pattern in Java 101 - Visitor Pattern (Behavioral Pattern)

Download Source Code

NOTE: This is written for me to recap and relearn what I learnt before….

This article is written in order for me to recap what I have learnt and used before, though I know there are already many sites which talked about all these.

Visitor Pattern defines a new operation to deal with the classes of the elements without changing their structures.

E.g.,

Create a IProcess interface,

public interface IProcessor {
    public void process(IMessage message);
}

IProcessor accepts IMessage as the parameter.

Create a IMessage interface,

public interface IMessage {
    public String parse();
}

Create a MessageProcessor class which implements IProcessor

public class MessageProcessor implements IProcessor{

    private String messageType;

    public void process(IMessage message) {
        messageType = message.parse();
    }

    public String toString() {
        return "Processor for " + messageType ;
    }
}

Create SMSMessage and MMSMessage class which implement IMessage

public class SMSMessage implements IMessage {

    public String parse() {
        return "SMS Message";
    }
}
public class MMSMessage implements IMessage {

    public String parse() {
        return "MMS Message";
    }
}

You can create another message processor depending on your need.

public class AnotherMessageProcessor {
    private String messageType;

    public void process(IMessage message) {
        messageType = message.parse();
    }

    public String toString() {
        return "Another Processor for " + messageType;
    }
}

To test it, use the following code stub


public class TestPattern {

    public static void main(String[] args) {
        MMSMessage mmsMessage = new MMSMessage();
        SMSMessage smsMessage = new SMSMessage();

        MessageProcessor messageProcessor = new MessageProcessor();
        AnotherMessageProcessor
                   anotherMessageProcessor =
                                   new AnotherMessageProcessor();

        messageProcessor.process(mmsMessage);
        System.out.println(messageProcessor.toString());

        messageProcessor.process(smsMessage);
        System.out.println(messageProcessor.toString());

        anotherMessageProcessor.process(mmsMessage);
        System.out.println(anotherMessageProcessor.toString());

        anotherMessageProcessor.process(smsMessage);
        System.out.println(anotherMessageProcessor.toString());
    }
}

The output

Processor for MMS Message
Processor for SMS Message
Another Processor for MMS Message
Another Processor for SMS Message


Trackback URL


RSS Feed for This Post1 Comment(s)

  1. Erin Klein | Apr 19, 2008 | Reply

    papacy accoladed blaff unmoving damagement bescent aboriginal selfsameness
    Diesel Spares India
    http://www.whisperingspiritsartgallery.com/

RSS Feed for This PostPost a Comment