Template Method Pattern : Template Pattern : Design Pattern : Java examples (example source code) Organized by topic

Java
C++
PHP


Java  »  Design Pattern   » [  Template Pattern  ]  Screenshots 
 



Template Method Pattern

//[C] 2002 Sun Microsystems, Inc.---
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Iterator;

public class RunTemplateMethodPattern {
    public static void main(String [] arguments){
        System.out.println("Example for the Template Method pattern");
        System.out.println("This code demonstrates how the template method can");
        System.out.println(" be used to define a variable implementation for a");
        System.out.println(" common operation. In this case, the ProjectItem");
        System.out.println(" abstract class defines the method getCostEstimate,");
        System.out.println(" which is a combination of the cost for time and");
        System.out.println(" materials. The two concrete subclasses used here,");
        System.out.println(" Task and Deliverable, have different methods of");
        System.out.println(" providing a cost estimate.");
        System.out.println();
        
        System.out.println("Creating a demo Task and Deliverable");
        System.out.println();
        Task primaryTask = new Task("Put a JVM on the moon""Lunar mission as part of the JavaSpace program ;)"240.0100.0);
        primaryTask.addProjectItem(new Task("Establish ground control"""1000.010.0));
        primaryTask.addProjectItem(new Task("Train the Javanaughts"""80.030.0));
        Deliverable deliverableOne = new Deliverable("Lunar landing module""Ask the local garage if they can make a few minor modifications to one of their cars"280040.035.0);
        
        System.out.println("Calculating the cost estimates using the Template Method, getCostEstimate.");
        System.out.println();
        System.out.println("Total cost estimate for: " + primaryTask);
        System.out.println("\t" + primaryTask.getCostEstimate());
        System.out.println();
        
        System.out.println("Total cost estimate for: " + deliverableOne);
        System.out.println("\t" + deliverableOne.getCostEstimate());
    }
}

abstract class ProjectItem implements Serializable{
    private String name;
    private String description;
    private double rate;
    
    public ProjectItem(){}
    public ProjectItem(String newName, String newDescription, double newRate){
        name = newName;
        description = newDescription;
        rate = newRate;
    }
    
    public void setName(String newName){ name = newName; }
    public void setDescription(String newDescription){ description = newDescription; }
    public void setRate(double newRate){ rate = newRate; }
    
    public String getName(){ return name; }
    public String getDescription(){ return description; }
    public final double getCostEstimate(){
        return getTimeRequired() * getRate() + getMaterialsCost();
    }
    public double getRate(){ return rate; }
    
    public String toString(){ return getName()}
    
    public abstract double getTimeRequired();
    public abstract double getMaterialsCost();
}

class Task extends ProjectItem{
    private ArrayList projectItems = new ArrayList();
    private double taskTimeRequired;
    
    public Task(){ }
    public Task(String newName, String newDescription,
        double newTaskTimeRequired, double newRate){
        super(newName, newDescription, newRate);
        taskTimeRequired = newTaskTimeRequired;
    }
    
    public void setTaskTimeRequired(double newTaskTimeRequired){ taskTimeRequired = newTaskTimeRequired; }
    public void addProjectItem(ProjectItem element){
        if (!projectItems.contains(element)){
            projectItems.add(element);
        }
    }
    public void removeProjectItem(ProjectItem element){
        projectItems.remove(element);
    }
    
    public double getTaskTimeRequired(){ return taskTimeRequired; }
    public Iterator getProjectItemIterator(){ return projectItems.iterator()}
    public double getMaterialsCost(){
        double totalCost = 0;
        Iterator items = getProjectItemIterator();
        while (items.hasNext()){
            totalCost += ((ProjectItem)items.next()).getMaterialsCost();
        }
        return totalCost;
    }
    public double getTimeRequired(){
        double totalTime = taskTimeRequired;
        Iterator items = getProjectItemIterator();
        while (items.hasNext()){
            totalTime += ((ProjectItem)items.next()).getTimeRequired();
        }
        return totalTime;
    }
}

class Deliverable extends ProjectItem{
    private double materialsCost;
    private double productionTime;
    
    public Deliverable(){ }
    public Deliverable(String newName, String newDescription,
        double newMaterialsCost, double newProductionTime,
        double newRate){
        super(newName, newDescription, newRate);
        materialsCost = newMaterialsCost;
        productionTime = newProductionTime;
    }
    
    public void setMaterialsCost(double newCost){ materialsCost = newCost; }
    public void setProductionTime(double newTime){ productionTime = newTime; }
    
    public double getMaterialsCost(){ return materialsCost; }
    public double getTimeRequired(){ return productionTime; }
}


           
       
Related examples in the same category
1.  Template pattern in Java Template pattern in Java
























Home| Contact Us
Copyright 2003 - 04 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.