header image
Main Menu
Home
Design Principles
Creational Patterns
Behavioral Patterns
Structural Patterns
Forum
What Design Pattern To Choose?
Design Principles and Patterns
Enterprise Patterns
Books
Home arrow Behavioral Patterns arrow Visitor Pattern - Customers Report - Java Sourcecode
| Add to del.icio.us
Visitor Pattern - Customers Report - Java Sourcecode PDF Print E-mail
Written by oodesign   

Visitor Pattern - Customers Report - Java Sourcecode


Java Source Code Example for the Visitor Design Pattern - implementation version without reflection

Visitor Customers Example - UML Class Diagram

Main.java - The Main class is the client object. It has a reference tot the Object structure. In our case the objects Structure is the Customers objects

package com.oodesign.designpatterns.behavioral.visitor.impl;
package com.oodesign.designpatterns.behavioral.visitor.customers;

public class Main {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub

Customer c = new Customer("customer1");
c.addOrder(new Order(".order1", "..item1"));
c.addOrder(new Order(".order2", "..item1"));
c.addOrder(new Order(".order3", "..item1"));

Customer c2 = new Customer("customer2");
Order o = new Order(".order_a");
o.addItem(new Item("..item_a1"));
o.addItem(new Item("..item_a2"));
o.addItem(new Item("..item_a3"));
c2.addOrder(o);
c2.addOrder(new Order(".order_b", "..item_b1"));


CustomerGroup customers = new CustomerGroup();
customers.addCustomer(c);
customers.addCustomer(c2);

GeneralReport visitor = new GeneralReport();

customers.accept(visitor);

visitor.displayResults();
}
}

IVisitor and IVisitable interfaces

package com.oodesign.designpatterns.behavioral.visitor.customers;

public interface IVisitable {
public void accept(IVisitor visitor);
}
package com.oodesign.designpatterns.behavioral.visitor.customers;

public interface IVisitor {
public void visit(Customer customer);
public void visit(Order order);
public void visit(Item item);
}

GeneralReport is a visitor class and implements the IVisitor interface. Other Visitors (other reports or other types of visitors) can be added by implementing the IVisitor interface

package com.oodesign.designpatterns.behavioral.visitor.customers;

public class GeneralReport implements IVisitor{

private int customersNo;
private int ordersNo;
private int itemsNo;

public void visit(Customer customer)
{
System.out.println(customer.getName());
customersNo ++;
}
public void visit(Order order)
{
System.out.println(order.getName());
ordersNo++;
}
public void visit(Item item)
{
System.out.println(item.getName());
itemsNo++;
}

public void displayResults()
{
System.out.println("Nr of customers:" + customersNo);
System.out.println("Nr of orders: " + ordersNo);
System.out.println("Nr of itemss: " + itemsNo);
}
}

CustomerGroup, Customer, Order and Item are all visitable classes. A CustomerGroup represents a group of customers, each Customer can have one or more orders and each order can have one ore more Items.

package com.oodesign.designpatterns.behavioral.visitor.customers;

import java.util.ArrayList;
import java.util.Iterator;

public class CustomerGroup {

private ArrayList customers = new ArrayList();

public void accept(IVisitor visitor)
{
for (Iterator it=customers.iterator(); it.hasNext();)
{
((Customer)it.next()).accept(visitor);
}
}

public void addCustomer(Customer customer)
{
customers.add(customer);
}

}
package com.oodesign.designpatterns.behavioral.visitor.customers;

import java.util.ArrayList;
import java.util.Iterator;

public class Customer implements IVisitable{

private String name;

private ArrayList orders = new ArrayList();

public void accept(IVisitor visitor)
{
visitor.visit(this);

for (Iterator it=orders.iterator(); it.hasNext();)
{
((IVisitable)it.next()).accept(visitor);
}
}


public String getName() {
return name;
}


public void setName(String name) {
this.name = name;
}

public void addOrder(Order order)
{
orders.add(order);
}


public Customer(String name)
{
this.name = name;
}
}
package com.oodesign.designpatterns.behavioral.visitor.customers;

import java.util.ArrayList;
import java.util.Iterator;

public class Order implements IVisitable {

private String name;

private ArrayList items = new ArrayList();

public Order(String name)
{
this.name = name;
}

public Order(String name, String itemName)
{
this.name = name;
this.addItem(new Item(itemName));
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public void accept(IVisitor visitor)
{
visitor.visit(this);

for (Iterator it=items.iterator(); it.hasNext();)
{
((Item)it.next()).accept(visitor);
}
}


public void addItem(Item item)
{
items.add(item);
}
}
package com.oodesign.designpatterns.behavioral.visitor.customers;

public class Item implements IVisitable{

private String name;

public void accept(IVisitor visitor)
{
visitor.visit(this);
}


public Item(String name)
{
this.name = name;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}
}
Last Updated ( Wednesday, 18 April 2007 )
 
< Prev   Next >