<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java%2FDesign_Pattern%2FVisitor_Pattern</id>
		<title>Java/Design Pattern/Visitor Pattern - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java%2FDesign_Pattern%2FVisitor_Pattern"/>
		<link rel="alternate" type="text/html" href="http://jexp.ru/index.php?title=Java/Design_Pattern/Visitor_Pattern&amp;action=history"/>
		<updated>2026-04-17T02:27:46Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://jexp.ru/index.php?title=Java/Design_Pattern/Visitor_Pattern&amp;diff=7823&amp;oldid=prev</id>
		<title>Admin: 1 версия</title>
		<link rel="alternate" type="text/html" href="http://jexp.ru/index.php?title=Java/Design_Pattern/Visitor_Pattern&amp;diff=7823&amp;oldid=prev"/>
				<updated>2010-06-01T06:50:57Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 06:50, 1 июня 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	<entry>
		<id>http://jexp.ru/index.php?title=Java/Design_Pattern/Visitor_Pattern&amp;diff=7822&amp;oldid=prev</id>
		<title> в 18:01, 31 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://jexp.ru/index.php?title=Java/Design_Pattern/Visitor_Pattern&amp;diff=7822&amp;oldid=prev"/>
				<updated>2010-05-31T18:01:45Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Visitor Pattern 1 ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
//[C] 2002 Sun Microsystems, Inc.---&lt;br /&gt;
import java.io.File;&lt;br /&gt;
import java.io.FileInputStream;&lt;br /&gt;
import java.io.FileOutputStream;&lt;br /&gt;
import java.io.IOException;&lt;br /&gt;
import java.io.ObjectInputStream;&lt;br /&gt;
import java.io.ObjectOutputStream;&lt;br /&gt;
import java.io.Serializable;&lt;br /&gt;
import java.util.ArrayList;&lt;br /&gt;
import java.util.Iterator;&lt;br /&gt;
public class RunVisitorPattern {&lt;br /&gt;
  public static void main(String[] arguments) {&lt;br /&gt;
    System.out.println(&amp;quot;Example for the Visitor pattern&amp;quot;);&lt;br /&gt;
    System.out.println();&lt;br /&gt;
    System.out&lt;br /&gt;
        .println(&amp;quot;This sample will use a ProjectCostVisitor to calculate&amp;quot;);&lt;br /&gt;
    System.out.println(&amp;quot; the total amount required to complete a Project.&amp;quot;);&lt;br /&gt;
    System.out.println();&lt;br /&gt;
    System.out.println(&amp;quot;Deserializing a test Project for Visitor pattern&amp;quot;);&lt;br /&gt;
    System.out.println();&lt;br /&gt;
    if (!(new File(&amp;quot;data.ser&amp;quot;).exists())) {&lt;br /&gt;
      DataCreator.serialize(&amp;quot;data.ser&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    Project project = (Project) (DataRetriever.deserializeData(&amp;quot;data.ser&amp;quot;));&lt;br /&gt;
    System.out&lt;br /&gt;
        .println(&amp;quot;Creating a ProjectCostVisitor, to calculate the total cost of the project.&amp;quot;);&lt;br /&gt;
    ProjectCostVisitor visitor = new ProjectCostVisitor();&lt;br /&gt;
    visitor.setHourlyRate(100);&lt;br /&gt;
    System.out&lt;br /&gt;
        .println(&amp;quot;Moving throuhg the Project, calculating total cost&amp;quot;);&lt;br /&gt;
    System.out&lt;br /&gt;
        .println(&amp;quot; by passing the Visitor to each of the ProjectItems.&amp;quot;);&lt;br /&gt;
    visitProjectItems(project, visitor);&lt;br /&gt;
    System.out.println(&amp;quot;The total cost for the project is: &amp;quot;&lt;br /&gt;
        + visitor.getTotalCost());&lt;br /&gt;
  }&lt;br /&gt;
  private static void visitProjectItems(ProjectItem item,&lt;br /&gt;
      ProjectVisitor visitor) {&lt;br /&gt;
    item.accept(visitor);&lt;br /&gt;
    if (item.getProjectItems() != null) {&lt;br /&gt;
      Iterator subElements = item.getProjectItems().iterator();&lt;br /&gt;
      while (subElements.hasNext()) {&lt;br /&gt;
        visitProjectItems((ProjectItem) subElements.next(), visitor);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
interface Contact extends Serializable {&lt;br /&gt;
  public static final String SPACE = &amp;quot; &amp;quot;;&lt;br /&gt;
  public String getFirstName();&lt;br /&gt;
  public String getLastName();&lt;br /&gt;
  public String getTitle();&lt;br /&gt;
  public String getOrganization();&lt;br /&gt;
  public void setFirstName(String newFirstName);&lt;br /&gt;
  public void setLastName(String newLastName);&lt;br /&gt;
  public void setTitle(String newTitle);&lt;br /&gt;
  public void setOrganization(String newOrganization);&lt;br /&gt;
}&lt;br /&gt;
class Task implements ProjectItem {&lt;br /&gt;
  private String name;&lt;br /&gt;
  private ArrayList projectItems = new ArrayList();&lt;br /&gt;
  private Contact owner;&lt;br /&gt;
  private double timeRequired;&lt;br /&gt;
  public Task() {&lt;br /&gt;
  }&lt;br /&gt;
  public Task(String newName, Contact newOwner, double newTimeRequired) {&lt;br /&gt;
    name = newName;&lt;br /&gt;
    owner = newOwner;&lt;br /&gt;
    timeRequired = newTimeRequired;&lt;br /&gt;
  }&lt;br /&gt;
  public String getName() {&lt;br /&gt;
    return name;&lt;br /&gt;
  }&lt;br /&gt;
  public ArrayList getProjectItems() {&lt;br /&gt;
    return projectItems;&lt;br /&gt;
  }&lt;br /&gt;
  public Contact getOwner() {&lt;br /&gt;
    return owner;&lt;br /&gt;
  }&lt;br /&gt;
  public double getTimeRequired() {&lt;br /&gt;
    return timeRequired;&lt;br /&gt;
  }&lt;br /&gt;
  public void setName(String newName) {&lt;br /&gt;
    name = newName;&lt;br /&gt;
  }&lt;br /&gt;
  public void setOwner(Contact newOwner) {&lt;br /&gt;
    owner = newOwner;&lt;br /&gt;
  }&lt;br /&gt;
  public void setTimeRequired(double newTimeRequired) {&lt;br /&gt;
    timeRequired = newTimeRequired;&lt;br /&gt;
  }&lt;br /&gt;
  public void addProjectItem(ProjectItem element) {&lt;br /&gt;
    if (!projectItems.contains(element)) {&lt;br /&gt;
      projectItems.add(element);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  public void removeProjectItem(ProjectItem element) {&lt;br /&gt;
    projectItems.remove(element);&lt;br /&gt;
  }&lt;br /&gt;
  public void accept(ProjectVisitor v) {&lt;br /&gt;
    v.visitTask(this);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class Deliverable implements ProjectItem {&lt;br /&gt;
  private String name;&lt;br /&gt;
  private String description;&lt;br /&gt;
  private Contact owner;&lt;br /&gt;
  private double materialsCost;&lt;br /&gt;
  private double productionCost;&lt;br /&gt;
  public Deliverable() {&lt;br /&gt;
  }&lt;br /&gt;
  public Deliverable(String newName, String newDescription, Contact newOwner,&lt;br /&gt;
      double newMaterialsCost, double newProductionCost) {&lt;br /&gt;
    name = newName;&lt;br /&gt;
    description = newDescription;&lt;br /&gt;
    owner = newOwner;&lt;br /&gt;
    materialsCost = newMaterialsCost;&lt;br /&gt;
    productionCost = newProductionCost;&lt;br /&gt;
  }&lt;br /&gt;
  public String getName() {&lt;br /&gt;
    return name;&lt;br /&gt;
  }&lt;br /&gt;
  public String getDescription() {&lt;br /&gt;
    return description;&lt;br /&gt;
  }&lt;br /&gt;
  public Contact getOwner() {&lt;br /&gt;
    return owner;&lt;br /&gt;
  }&lt;br /&gt;
  public double getMaterialsCost() {&lt;br /&gt;
    return materialsCost;&lt;br /&gt;
  }&lt;br /&gt;
  public double getProductionCost() {&lt;br /&gt;
    return productionCost;&lt;br /&gt;
  }&lt;br /&gt;
  public void setMaterialsCost(double newCost) {&lt;br /&gt;
    materialsCost = newCost;&lt;br /&gt;
  }&lt;br /&gt;
  public void setProductionCost(double newCost) {&lt;br /&gt;
    productionCost = newCost;&lt;br /&gt;
  }&lt;br /&gt;
  public void setName(String newName) {&lt;br /&gt;
    name = newName;&lt;br /&gt;
  }&lt;br /&gt;
  public void setDescription(String newDescription) {&lt;br /&gt;
    description = newDescription;&lt;br /&gt;
  }&lt;br /&gt;
  public void setOwner(Contact newOwner) {&lt;br /&gt;
    owner = newOwner;&lt;br /&gt;
  }&lt;br /&gt;
  public void accept(ProjectVisitor v) {&lt;br /&gt;
    v.visitDeliverable(this);&lt;br /&gt;
  }&lt;br /&gt;
  public ArrayList getProjectItems() {&lt;br /&gt;
    return null;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
interface ProjectVisitor {&lt;br /&gt;
  public void visitDependentTask(DependentTask p);&lt;br /&gt;
  public void visitDeliverable(Deliverable p);&lt;br /&gt;
  public void visitTask(Task p);&lt;br /&gt;
  public void visitProject(Project p);&lt;br /&gt;
}&lt;br /&gt;
interface ProjectItem extends Serializable {&lt;br /&gt;
  public void accept(ProjectVisitor v);&lt;br /&gt;
  public ArrayList getProjectItems();&lt;br /&gt;
}&lt;br /&gt;
class ContactImpl implements Contact {&lt;br /&gt;
  private String firstName;&lt;br /&gt;
  private String lastName;&lt;br /&gt;
  private String title;&lt;br /&gt;
  private String organization;&lt;br /&gt;
  public ContactImpl() {&lt;br /&gt;
  }&lt;br /&gt;
  public ContactImpl(String newFirstName, String newLastName,&lt;br /&gt;
      String newTitle, String newOrganization) {&lt;br /&gt;
    firstName = newFirstName;&lt;br /&gt;
    lastName = newLastName;&lt;br /&gt;
    title = newTitle;&lt;br /&gt;
    organization = newOrganization;&lt;br /&gt;
  }&lt;br /&gt;
  public String getFirstName() {&lt;br /&gt;
    return firstName;&lt;br /&gt;
  }&lt;br /&gt;
  public String getLastName() {&lt;br /&gt;
    return lastName;&lt;br /&gt;
  }&lt;br /&gt;
  public String getTitle() {&lt;br /&gt;
    return title;&lt;br /&gt;
  }&lt;br /&gt;
  public String getOrganization() {&lt;br /&gt;
    return organization;&lt;br /&gt;
  }&lt;br /&gt;
  public void setFirstName(String newFirstName) {&lt;br /&gt;
    firstName = newFirstName;&lt;br /&gt;
  }&lt;br /&gt;
  public void setLastName(String newLastName) {&lt;br /&gt;
    lastName = newLastName;&lt;br /&gt;
  }&lt;br /&gt;
  public void setTitle(String newTitle) {&lt;br /&gt;
    title = newTitle;&lt;br /&gt;
  }&lt;br /&gt;
  public void setOrganization(String newOrganization) {&lt;br /&gt;
    organization = newOrganization;&lt;br /&gt;
  }&lt;br /&gt;
  public String toString() {&lt;br /&gt;
    return firstName + SPACE + lastName;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class DataCreator {&lt;br /&gt;
  private static final String DEFAULT_FILE = &amp;quot;data.ser&amp;quot;;&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    String fileName;&lt;br /&gt;
    if (args.length == 1) {&lt;br /&gt;
      fileName = args[0];&lt;br /&gt;
    } else {&lt;br /&gt;
      fileName = DEFAULT_FILE;&lt;br /&gt;
    }&lt;br /&gt;
    serialize(fileName);&lt;br /&gt;
  }&lt;br /&gt;
  public static void serialize(String fileName) {&lt;br /&gt;
    try {&lt;br /&gt;
      serializeToFile(createData(), fileName);&lt;br /&gt;
    } catch (IOException exc) {&lt;br /&gt;
      exc.printStackTrace();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  private static Serializable createData() {&lt;br /&gt;
    Contact contact = new ContactImpl(&amp;quot;Test&amp;quot;, &amp;quot;Subject&amp;quot;, &amp;quot;Volunteer&amp;quot;,&lt;br /&gt;
        &amp;quot;United Patterns Consortium&amp;quot;);&lt;br /&gt;
    Project project = new Project(&amp;quot;Project 1&amp;quot;, &amp;quot;Test Project&amp;quot;);&lt;br /&gt;
    Task task1 = new Task(&amp;quot;Task 1&amp;quot;, contact, 1);&lt;br /&gt;
    Task task2 = new Task(&amp;quot;Task 2&amp;quot;, contact, 1);&lt;br /&gt;
    project.addProjectItem(new Deliverable(&amp;quot;Deliverable 1&amp;quot;,&lt;br /&gt;
        &amp;quot;Layer 1 deliverable&amp;quot;, contact, 50.0, 50.0));&lt;br /&gt;
    project.addProjectItem(task1);&lt;br /&gt;
    project.addProjectItem(task2);&lt;br /&gt;
    project.addProjectItem(new DependentTask(&amp;quot;Dependent Task 1&amp;quot;, contact,&lt;br /&gt;
        1, 1));&lt;br /&gt;
    Task task3 = new Task(&amp;quot;Task 3&amp;quot;, contact, 1);&lt;br /&gt;
    Task task4 = new Task(&amp;quot;Task 4&amp;quot;, contact, 1);&lt;br /&gt;
    Task task5 = new Task(&amp;quot;Task 5&amp;quot;, contact, 1);&lt;br /&gt;
    Task task6 = new Task(&amp;quot;Task 6&amp;quot;, contact, 1);&lt;br /&gt;
    DependentTask dtask2 = new DependentTask(&amp;quot;Dependent Task 2&amp;quot;, contact,&lt;br /&gt;
        1, 1);&lt;br /&gt;
    task1.addProjectItem(task3);&lt;br /&gt;
    task1.addProjectItem(task4);&lt;br /&gt;
    task1.addProjectItem(task5);&lt;br /&gt;
    task1.addProjectItem(dtask2);&lt;br /&gt;
    dtask2.addDependentTask(task5);&lt;br /&gt;
    dtask2.addDependentTask(task6);&lt;br /&gt;
    dtask2.addProjectItem(new Deliverable(&amp;quot;Deliverable 2&amp;quot;,&lt;br /&gt;
        &amp;quot;Layer 3 deliverable&amp;quot;, contact, 50.0, 50.0));&lt;br /&gt;
    task3.addProjectItem(new Deliverable(&amp;quot;Deliverable 3&amp;quot;,&lt;br /&gt;
        &amp;quot;Layer 3 deliverable&amp;quot;, contact, 50.0, 50.0));&lt;br /&gt;
    task4.addProjectItem(new Task(&amp;quot;Task 7&amp;quot;, contact, 1));&lt;br /&gt;
    task4.addProjectItem(new Deliverable(&amp;quot;Deliverable 4&amp;quot;,&lt;br /&gt;
        &amp;quot;Layer 3 deliverable&amp;quot;, contact, 50.0, 50.0));&lt;br /&gt;
    return project;&lt;br /&gt;
  }&lt;br /&gt;
  private static void serializeToFile(Serializable content, String fileName)&lt;br /&gt;
      throws IOException {&lt;br /&gt;
    ObjectOutputStream serOut = new ObjectOutputStream(&lt;br /&gt;
        new FileOutputStream(fileName));&lt;br /&gt;
    serOut.writeObject(content);&lt;br /&gt;
    serOut.close();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class DataRetriever {&lt;br /&gt;
  public static Object deserializeData(String fileName) {&lt;br /&gt;
    Object returnValue = null;&lt;br /&gt;
    try {&lt;br /&gt;
      File inputFile = new File(fileName);&lt;br /&gt;
      if (inputFile.exists() &amp;amp;&amp;amp; inputFile.isFile()) {&lt;br /&gt;
        ObjectInputStream readIn = new ObjectInputStream(&lt;br /&gt;
            new FileInputStream(fileName));&lt;br /&gt;
        returnValue = readIn.readObject();&lt;br /&gt;
        readIn.close();&lt;br /&gt;
      } else {&lt;br /&gt;
        System.err.println(&amp;quot;Unable to locate the file &amp;quot; + fileName);&lt;br /&gt;
      }&lt;br /&gt;
    } catch (ClassNotFoundException exc) {&lt;br /&gt;
      exc.printStackTrace();&lt;br /&gt;
    } catch (IOException exc) {&lt;br /&gt;
      exc.printStackTrace();&lt;br /&gt;
    }&lt;br /&gt;
    return returnValue;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class DependentTask extends Task {&lt;br /&gt;
  private ArrayList dependentTasks = new ArrayList();&lt;br /&gt;
  private double dependencyWeightingFactor;&lt;br /&gt;
  public DependentTask() {&lt;br /&gt;
  }&lt;br /&gt;
  public DependentTask(String newName, Contact newOwner,&lt;br /&gt;
      double newTimeRequired, double newWeightingFactor) {&lt;br /&gt;
    super(newName, newOwner, newTimeRequired);&lt;br /&gt;
    dependencyWeightingFactor = newWeightingFactor;&lt;br /&gt;
  }&lt;br /&gt;
  public ArrayList getDependentTasks() {&lt;br /&gt;
    return dependentTasks;&lt;br /&gt;
  }&lt;br /&gt;
  public double getDependencyWeightingFactor() {&lt;br /&gt;
    return dependencyWeightingFactor;&lt;br /&gt;
  }&lt;br /&gt;
  public void setDependencyWeightingFactor(double newFactor) {&lt;br /&gt;
    dependencyWeightingFactor = newFactor;&lt;br /&gt;
  }&lt;br /&gt;
  public void addDependentTask(Task element) {&lt;br /&gt;
    if (!dependentTasks.contains(element)) {&lt;br /&gt;
      dependentTasks.add(element);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  public void removeDependentTask(Task element) {&lt;br /&gt;
    dependentTasks.remove(element);&lt;br /&gt;
  }&lt;br /&gt;
  public void accept(ProjectVisitor v) {&lt;br /&gt;
    v.visitDependentTask(this);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class Project implements ProjectItem {&lt;br /&gt;
  private String name;&lt;br /&gt;
  private String description;&lt;br /&gt;
  private ArrayList projectItems = new ArrayList();&lt;br /&gt;
  public Project() {&lt;br /&gt;
  }&lt;br /&gt;
  public Project(String newName, String newDescription) {&lt;br /&gt;
    name = newName;&lt;br /&gt;
    description = newDescription;&lt;br /&gt;
  }&lt;br /&gt;
  public String getName() {&lt;br /&gt;
    return name;&lt;br /&gt;
  }&lt;br /&gt;
  public String getDescription() {&lt;br /&gt;
    return description;&lt;br /&gt;
  }&lt;br /&gt;
  public ArrayList getProjectItems() {&lt;br /&gt;
    return projectItems;&lt;br /&gt;
  }&lt;br /&gt;
  public void setName(String newName) {&lt;br /&gt;
    name = newName;&lt;br /&gt;
  }&lt;br /&gt;
  public void setDescription(String newDescription) {&lt;br /&gt;
    description = newDescription;&lt;br /&gt;
  }&lt;br /&gt;
  public void addProjectItem(ProjectItem element) {&lt;br /&gt;
    if (!projectItems.contains(element)) {&lt;br /&gt;
      projectItems.add(element);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  public void removeProjectItem(ProjectItem element) {&lt;br /&gt;
    projectItems.remove(element);&lt;br /&gt;
  }&lt;br /&gt;
  public void accept(ProjectVisitor v) {&lt;br /&gt;
    v.visitProject(this);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class ProjectCostVisitor implements ProjectVisitor {&lt;br /&gt;
  private double totalCost;&lt;br /&gt;
  private double hourlyRate;&lt;br /&gt;
  public double getHourlyRate() {&lt;br /&gt;
    return hourlyRate;&lt;br /&gt;
  }&lt;br /&gt;
  public double getTotalCost() {&lt;br /&gt;
    return totalCost;&lt;br /&gt;
  }&lt;br /&gt;
  public void setHourlyRate(double rate) {&lt;br /&gt;
    hourlyRate = rate;&lt;br /&gt;
  }&lt;br /&gt;
  public void resetTotalCost() {&lt;br /&gt;
    totalCost = 0.0;&lt;br /&gt;
  }&lt;br /&gt;
  public void visitDependentTask(DependentTask p) {&lt;br /&gt;
    double taskCost = p.getTimeRequired() * hourlyRate;&lt;br /&gt;
    taskCost *= p.getDependencyWeightingFactor();&lt;br /&gt;
    totalCost += taskCost;&lt;br /&gt;
  }&lt;br /&gt;
  public void visitDeliverable(Deliverable p) {&lt;br /&gt;
    totalCost += p.getMaterialsCost() + p.getProductionCost();&lt;br /&gt;
  }&lt;br /&gt;
  public void visitTask(Task p) {&lt;br /&gt;
    totalCost += p.getTimeRequired() * hourlyRate;&lt;br /&gt;
  }&lt;br /&gt;
  public void visitProject(Project p) {&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Visitor Pattern - Example ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
Software Architecture Design Patterns in Java&lt;br /&gt;
by Partha Kuchana &lt;br /&gt;
Auerbach Publications&lt;br /&gt;
&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
import java.awt.BorderLayout;&lt;br /&gt;
import java.awt.Container;&lt;br /&gt;
import java.awt.GridBagConstraints;&lt;br /&gt;
import java.awt.GridBagLayout;&lt;br /&gt;
import java.awt.event.ActionEvent;&lt;br /&gt;
import java.awt.event.ActionListener;&lt;br /&gt;
import java.awt.event.KeyEvent;&lt;br /&gt;
import java.awt.event.WindowAdapter;&lt;br /&gt;
import java.awt.event.WindowEvent;&lt;br /&gt;
import java.util.Vector;&lt;br /&gt;
import javax.swing.JButton;&lt;br /&gt;
import javax.swing.JComboBox;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
import javax.swing.JLabel;&lt;br /&gt;
import javax.swing.JPanel;&lt;br /&gt;
import javax.swing.JTextField;&lt;br /&gt;
import javax.swing.SwingUtilities;&lt;br /&gt;
import javax.swing.UIManager;&lt;br /&gt;
import com.sun.java.swing.plaf.windows.WindowsLookAndFeel;&lt;br /&gt;
public class OrderManager extends JFrame {&lt;br /&gt;
  public static final String newline = &amp;quot;\n&amp;quot;;&lt;br /&gt;
  public static final String GET_TOTAL = &amp;quot;Get Total&amp;quot;;&lt;br /&gt;
  public static final String CREATE_ORDER = &amp;quot;Create Order&amp;quot;;&lt;br /&gt;
  public static final String EXIT = &amp;quot;Exit&amp;quot;;&lt;br /&gt;
  public static final String CA_ORDER = &amp;quot;California Order&amp;quot;;&lt;br /&gt;
  public static final String NON_CA_ORDER = &amp;quot;Non-California Order&amp;quot;;&lt;br /&gt;
  public static final String OVERSEAS_ORDER = &amp;quot;Overseas Order&amp;quot;;&lt;br /&gt;
  private JComboBox cmbOrderType;&lt;br /&gt;
  private JTextField txtOrderAmount, txtAdditionalTax, txtAdditionalSH;&lt;br /&gt;
  private JLabel lblOrderType, lblOrderAmount;&lt;br /&gt;
  private JLabel lblAdditionalTax, lblAdditionalSH;&lt;br /&gt;
  private JLabel lblTotal, lblTotalValue;&lt;br /&gt;
  private OrderVisitor objVisitor;&lt;br /&gt;
  public OrderManager() {&lt;br /&gt;
    super(&amp;quot;Visitor Pattern - Example&amp;quot;);&lt;br /&gt;
    //Create the visitor instance&lt;br /&gt;
    objVisitor = new OrderVisitor();&lt;br /&gt;
    cmbOrderType = new JComboBox();&lt;br /&gt;
    cmbOrderType.addItem(OrderManager.CA_ORDER);&lt;br /&gt;
    cmbOrderType.addItem(OrderManager.NON_CA_ORDER);&lt;br /&gt;
    cmbOrderType.addItem(OrderManager.OVERSEAS_ORDER);&lt;br /&gt;
    txtOrderAmount = new JTextField(10);&lt;br /&gt;
    txtAdditionalTax = new JTextField(10);&lt;br /&gt;
    txtAdditionalSH = new JTextField(10);&lt;br /&gt;
    lblOrderType = new JLabel(&amp;quot;Order Type:&amp;quot;);&lt;br /&gt;
    lblOrderAmount = new JLabel(&amp;quot;Order Amount:&amp;quot;);&lt;br /&gt;
    lblAdditionalTax = new JLabel(&amp;quot;Additional Tax(CA Orders Only):&amp;quot;);&lt;br /&gt;
    lblAdditionalSH = new JLabel(&amp;quot;Additional S &amp;amp; H(Overseas Orders Only):&amp;quot;);&lt;br /&gt;
    lblTotal = new JLabel(&amp;quot;Result:&amp;quot;);&lt;br /&gt;
    lblTotalValue = new JLabel(&amp;quot;Click Create or GetTotal Button&amp;quot;);&lt;br /&gt;
    //Create the open button&lt;br /&gt;
    JButton getTotalButton = new JButton(OrderManager.GET_TOTAL);&lt;br /&gt;
    getTotalButton.setMnemonic(KeyEvent.VK_G);&lt;br /&gt;
    JButton createOrderButton = new JButton(OrderManager.CREATE_ORDER);&lt;br /&gt;
    getTotalButton.setMnemonic(KeyEvent.VK_C);&lt;br /&gt;
    JButton exitButton = new JButton(OrderManager.EXIT);&lt;br /&gt;
    exitButton.setMnemonic(KeyEvent.VK_X);&lt;br /&gt;
    ButtonHandler objButtonHandler = new ButtonHandler(this);&lt;br /&gt;
    getTotalButton.addActionListener(objButtonHandler);&lt;br /&gt;
    createOrderButton.addActionListener(objButtonHandler);&lt;br /&gt;
    exitButton.addActionListener(new ButtonHandler());&lt;br /&gt;
    //For layout purposes, put the buttons in a separate panel&lt;br /&gt;
    JPanel buttonPanel = new JPanel();&lt;br /&gt;
    JPanel panel = new JPanel();&lt;br /&gt;
    GridBagLayout gridbag2 = new GridBagLayout();&lt;br /&gt;
    panel.setLayout(gridbag2);&lt;br /&gt;
    GridBagConstraints gbc2 = new GridBagConstraints();&lt;br /&gt;
    panel.add(getTotalButton);&lt;br /&gt;
    panel.add(createOrderButton);&lt;br /&gt;
    panel.add(exitButton);&lt;br /&gt;
    gbc2.anchor = GridBagConstraints.EAST;&lt;br /&gt;
    gbc2.gridx = 0;&lt;br /&gt;
    gbc2.gridy = 0;&lt;br /&gt;
    gridbag2.setConstraints(createOrderButton, gbc2);&lt;br /&gt;
    gbc2.gridx = 1;&lt;br /&gt;
    gbc2.gridy = 0;&lt;br /&gt;
    gridbag2.setConstraints(getTotalButton, gbc2);&lt;br /&gt;
    gbc2.gridx = 2;&lt;br /&gt;
    gbc2.gridy = 0;&lt;br /&gt;
    gridbag2.setConstraints(exitButton, gbc2);&lt;br /&gt;
    //****************************************************&lt;br /&gt;
    GridBagLayout gridbag = new GridBagLayout();&lt;br /&gt;
    buttonPanel.setLayout(gridbag);&lt;br /&gt;
    GridBagConstraints gbc = new GridBagConstraints();&lt;br /&gt;
    buttonPanel.add(lblOrderType);&lt;br /&gt;
    buttonPanel.add(cmbOrderType);&lt;br /&gt;
    buttonPanel.add(lblOrderAmount);&lt;br /&gt;
    buttonPanel.add(txtOrderAmount);&lt;br /&gt;
    buttonPanel.add(lblAdditionalTax);&lt;br /&gt;
    buttonPanel.add(txtAdditionalTax);&lt;br /&gt;
    buttonPanel.add(lblAdditionalSH);&lt;br /&gt;
    buttonPanel.add(txtAdditionalSH);&lt;br /&gt;
    buttonPanel.add(lblTotal);&lt;br /&gt;
    buttonPanel.add(lblTotalValue);&lt;br /&gt;
    gbc.insets.top = 5;&lt;br /&gt;
    gbc.insets.bottom = 5;&lt;br /&gt;
    gbc.insets.left = 5;&lt;br /&gt;
    gbc.insets.right = 5;&lt;br /&gt;
    gbc.anchor = GridBagConstraints.EAST;&lt;br /&gt;
    gbc.gridx = 0;&lt;br /&gt;
    gbc.gridy = 0;&lt;br /&gt;
    gridbag.setConstraints(lblOrderType, gbc);&lt;br /&gt;
    gbc.anchor = GridBagConstraints.WEST;&lt;br /&gt;
    gbc.gridx = 1;&lt;br /&gt;
    gbc.gridy = 0;&lt;br /&gt;
    gridbag.setConstraints(cmbOrderType, gbc);&lt;br /&gt;
    gbc.anchor = GridBagConstraints.EAST;&lt;br /&gt;
    gbc.gridx = 0;&lt;br /&gt;
    gbc.gridy = 1;&lt;br /&gt;
    gridbag.setConstraints(lblOrderAmount, gbc);&lt;br /&gt;
    gbc.anchor = GridBagConstraints.WEST;&lt;br /&gt;
    gbc.gridx = 1;&lt;br /&gt;
    gbc.gridy = 1;&lt;br /&gt;
    gridbag.setConstraints(txtOrderAmount, gbc);&lt;br /&gt;
    gbc.anchor = GridBagConstraints.EAST;&lt;br /&gt;
    gbc.gridx = 0;&lt;br /&gt;
    gbc.gridy = 2;&lt;br /&gt;
    gridbag.setConstraints(lblAdditionalTax, gbc);&lt;br /&gt;
    gbc.anchor = GridBagConstraints.WEST;&lt;br /&gt;
    gbc.gridx = 1;&lt;br /&gt;
    gbc.gridy = 2;&lt;br /&gt;
    gridbag.setConstraints(txtAdditionalTax, gbc);&lt;br /&gt;
    gbc.anchor = GridBagConstraints.EAST;&lt;br /&gt;
    gbc.gridx = 0;&lt;br /&gt;
    gbc.gridy = 3;&lt;br /&gt;
    gridbag.setConstraints(lblAdditionalSH, gbc);&lt;br /&gt;
    gbc.anchor = GridBagConstraints.WEST;&lt;br /&gt;
    gbc.gridx = 1;&lt;br /&gt;
    gbc.gridy = 3;&lt;br /&gt;
    gridbag.setConstraints(txtAdditionalSH, gbc);&lt;br /&gt;
    gbc.anchor = GridBagConstraints.EAST;&lt;br /&gt;
    gbc.gridx = 0;&lt;br /&gt;
    gbc.gridy = 4;&lt;br /&gt;
    gridbag.setConstraints(lblTotal, gbc);&lt;br /&gt;
    gbc.anchor = GridBagConstraints.WEST;&lt;br /&gt;
    gbc.gridx = 1;&lt;br /&gt;
    gbc.gridy = 4;&lt;br /&gt;
    gridbag.setConstraints(lblTotalValue, gbc);&lt;br /&gt;
    gbc.insets.left = 2;&lt;br /&gt;
    gbc.insets.right = 2;&lt;br /&gt;
    gbc.insets.top = 40;&lt;br /&gt;
    //****************************************************&lt;br /&gt;
    //Add the buttons and the log to the frame&lt;br /&gt;
    Container contentPane = getContentPane();&lt;br /&gt;
    contentPane.add(buttonPanel, BorderLayout.NORTH);&lt;br /&gt;
    contentPane.add(panel, BorderLayout.CENTER);&lt;br /&gt;
    try {&lt;br /&gt;
      UIManager.setLookAndFeel(new WindowsLookAndFeel());&lt;br /&gt;
      SwingUtilities.updateComponentTreeUI(OrderManager.this);&lt;br /&gt;
    } catch (Exception ex) {&lt;br /&gt;
      System.out.println(ex);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    JFrame frame = new OrderManager();&lt;br /&gt;
    frame.addWindowListener(new WindowAdapter() {&lt;br /&gt;
      public void windowClosing(WindowEvent e) {&lt;br /&gt;
        System.exit(0);&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
    //frame.pack();&lt;br /&gt;
    frame.setSize(500, 400);&lt;br /&gt;
    frame.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
  public void setTotalValue(String msg) {&lt;br /&gt;
    lblTotalValue.setText(msg);&lt;br /&gt;
  }&lt;br /&gt;
  public OrderVisitor getOrderVisitor() {&lt;br /&gt;
    return objVisitor;&lt;br /&gt;
  }&lt;br /&gt;
  public String getOrderType() {&lt;br /&gt;
    return (String) cmbOrderType.getSelectedItem();&lt;br /&gt;
  }&lt;br /&gt;
  public String getOrderAmount() {&lt;br /&gt;
    return txtOrderAmount.getText();&lt;br /&gt;
  }&lt;br /&gt;
  public String getTax() {&lt;br /&gt;
    return txtAdditionalTax.getText();&lt;br /&gt;
  }&lt;br /&gt;
  public String getSH() {&lt;br /&gt;
    return txtAdditionalSH.getText();&lt;br /&gt;
  }&lt;br /&gt;
} // End of class OrderManager&lt;br /&gt;
class ButtonHandler implements ActionListener {&lt;br /&gt;
  OrderManager objOrderManager;&lt;br /&gt;
  public void actionPerformed(ActionEvent e) {&lt;br /&gt;
    String totalResult = null;&lt;br /&gt;
    if (e.getActionCommand().equals(OrderManager.EXIT)) {&lt;br /&gt;
      System.exit(1);&lt;br /&gt;
    }&lt;br /&gt;
    if (e.getActionCommand().equals(OrderManager.CREATE_ORDER)) {&lt;br /&gt;
      //get input values&lt;br /&gt;
      String orderType = objOrderManager.getOrderType();&lt;br /&gt;
      String strOrderAmount = objOrderManager.getOrderAmount();&lt;br /&gt;
      String strTax = objOrderManager.getTax();&lt;br /&gt;
      String strSH = objOrderManager.getSH();&lt;br /&gt;
      double dblOrderAmount = 0.0;&lt;br /&gt;
      double dblTax = 0.0;&lt;br /&gt;
      double dblSH = 0.0;&lt;br /&gt;
      if (strOrderAmount.trim().length() == 0) {&lt;br /&gt;
        strOrderAmount = &amp;quot;0.0&amp;quot;;&lt;br /&gt;
      }&lt;br /&gt;
      if (strTax.trim().length() == 0) {&lt;br /&gt;
        strTax = &amp;quot;0.0&amp;quot;;&lt;br /&gt;
      }&lt;br /&gt;
      if (strSH.trim().length() == 0) {&lt;br /&gt;
        strSH = &amp;quot;0.0&amp;quot;;&lt;br /&gt;
      }&lt;br /&gt;
      dblOrderAmount = new Double(strOrderAmount).doubleValue();&lt;br /&gt;
      dblTax = new Double(strTax).doubleValue();&lt;br /&gt;
      dblSH = new Double(strSH).doubleValue();&lt;br /&gt;
      //Create the order&lt;br /&gt;
      Order order = createOrder(orderType, dblOrderAmount, dblTax, dblSH);&lt;br /&gt;
      //Get the Visitor&lt;br /&gt;
      OrderVisitor visitor = objOrderManager.getOrderVisitor();&lt;br /&gt;
      // accept the visitor instance&lt;br /&gt;
      order.accept(visitor);&lt;br /&gt;
      objOrderManager.setTotalValue(&amp;quot; Order Created Successfully&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    if (e.getActionCommand().equals(OrderManager.GET_TOTAL)) {&lt;br /&gt;
      //Get the Visitor&lt;br /&gt;
      OrderVisitor visitor = objOrderManager.getOrderVisitor();&lt;br /&gt;
      totalResult = new Double(visitor.getOrderTotal()).toString();&lt;br /&gt;
      totalResult = &amp;quot; Orders Total = &amp;quot; + totalResult;&lt;br /&gt;
      objOrderManager.setTotalValue(totalResult);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  public Order createOrder(String orderType, double orderAmount, double tax,&lt;br /&gt;
      double SH) {&lt;br /&gt;
    if (orderType.equalsIgnoreCase(OrderManager.CA_ORDER)) {&lt;br /&gt;
      return new CaliforniaOrder(orderAmount, tax);&lt;br /&gt;
    }&lt;br /&gt;
    if (orderType.equalsIgnoreCase(OrderManager.NON_CA_ORDER)) {&lt;br /&gt;
      return new NonCaliforniaOrder(orderAmount);&lt;br /&gt;
    }&lt;br /&gt;
    if (orderType.equalsIgnoreCase(OrderManager.OVERSEAS_ORDER)) {&lt;br /&gt;
      return new OverseasOrder(orderAmount, SH);&lt;br /&gt;
    }&lt;br /&gt;
    return null;&lt;br /&gt;
  }&lt;br /&gt;
  public ButtonHandler() {&lt;br /&gt;
  }&lt;br /&gt;
  public ButtonHandler(OrderManager inObjOrderManager) {&lt;br /&gt;
    objOrderManager = inObjOrderManager;&lt;br /&gt;
  }&lt;br /&gt;
} // End of class ButtonHandler&lt;br /&gt;
class NonCaliforniaOrder implements Order {&lt;br /&gt;
  private double orderAmount;&lt;br /&gt;
  public NonCaliforniaOrder() {&lt;br /&gt;
  }&lt;br /&gt;
  public NonCaliforniaOrder(double inp_orderAmount) {&lt;br /&gt;
    orderAmount = inp_orderAmount;&lt;br /&gt;
  }&lt;br /&gt;
  public double getOrderAmount() {&lt;br /&gt;
    return orderAmount;&lt;br /&gt;
  }&lt;br /&gt;
  public void accept(OrderVisitor v) {&lt;br /&gt;
    v.visit(this);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class CaliforniaOrder implements Order {&lt;br /&gt;
  private double orderAmount;&lt;br /&gt;
  private double additionalTax;&lt;br /&gt;
  public CaliforniaOrder() {&lt;br /&gt;
  }&lt;br /&gt;
  public CaliforniaOrder(double inp_orderAmount, double inp_additionalTax) {&lt;br /&gt;
    orderAmount = inp_orderAmount;&lt;br /&gt;
    additionalTax = inp_additionalTax;&lt;br /&gt;
  }&lt;br /&gt;
  public double getOrderAmount() {&lt;br /&gt;
    return orderAmount;&lt;br /&gt;
  }&lt;br /&gt;
  public double getAdditionalTax() {&lt;br /&gt;
    return additionalTax;&lt;br /&gt;
  }&lt;br /&gt;
  public void accept(OrderVisitor v) {&lt;br /&gt;
    v.visit(this);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
interface VisitorInterface {&lt;br /&gt;
  public void visit(NonCaliforniaOrder nco);&lt;br /&gt;
  public void visit(CaliforniaOrder co);&lt;br /&gt;
  public void visit(OverseasOrder oo);&lt;br /&gt;
}&lt;br /&gt;
class OverseasOrder implements Order {&lt;br /&gt;
  private double orderAmount;&lt;br /&gt;
  private double additionalSH;&lt;br /&gt;
  public OverseasOrder() {&lt;br /&gt;
  }&lt;br /&gt;
  public OverseasOrder(double inp_orderAmount, double inp_additionalSH) {&lt;br /&gt;
    orderAmount = inp_orderAmount;&lt;br /&gt;
    additionalSH = inp_additionalSH;&lt;br /&gt;
  }&lt;br /&gt;
  public double getOrderAmount() {&lt;br /&gt;
    return orderAmount;&lt;br /&gt;
  }&lt;br /&gt;
  public double getAdditionalSH() {&lt;br /&gt;
    return additionalSH;&lt;br /&gt;
  }&lt;br /&gt;
  public void accept(OrderVisitor v) {&lt;br /&gt;
    v.visit(this);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class OrderVisitor implements VisitorInterface {&lt;br /&gt;
  private Vector orderObjList;&lt;br /&gt;
  private double orderTotal;&lt;br /&gt;
  public OrderVisitor() {&lt;br /&gt;
    orderObjList = new Vector();&lt;br /&gt;
  }&lt;br /&gt;
  public void visit(NonCaliforniaOrder inp_order) {&lt;br /&gt;
    orderTotal = orderTotal + inp_order.getOrderAmount();&lt;br /&gt;
  }&lt;br /&gt;
  public void visit(CaliforniaOrder inp_order) {&lt;br /&gt;
    orderTotal = orderTotal + inp_order.getOrderAmount()&lt;br /&gt;
        + inp_order.getAdditionalTax();&lt;br /&gt;
  }&lt;br /&gt;
  public void visit(OverseasOrder inp_order) {&lt;br /&gt;
    orderTotal = orderTotal + inp_order.getOrderAmount()&lt;br /&gt;
        + inp_order.getAdditionalSH();&lt;br /&gt;
  }&lt;br /&gt;
  public double getOrderTotal() {&lt;br /&gt;
    return orderTotal;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
interface Order {&lt;br /&gt;
  public void accept(OrderVisitor v);&lt;br /&gt;
}&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Visitor pattern in Java ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
The Design Patterns Java Companion&lt;br /&gt;
Copyright (C) 1998, by James W. Cooper&lt;br /&gt;
IBM Thomas J. Watson Research Center&lt;br /&gt;
*/&lt;br /&gt;
import java.awt.Color;&lt;br /&gt;
import java.awt.GridLayout;&lt;br /&gt;
import java.awt.event.ActionEvent;&lt;br /&gt;
import java.awt.event.ActionListener;&lt;br /&gt;
import java.awt.event.WindowAdapter;&lt;br /&gt;
import java.awt.event.WindowEvent;&lt;br /&gt;
import java.util.Vector;&lt;br /&gt;
import javax.swing.AbstractListModel;&lt;br /&gt;
import javax.swing.Box;&lt;br /&gt;
import javax.swing.JButton;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
import javax.swing.JList;&lt;br /&gt;
import javax.swing.JPanel;&lt;br /&gt;
import javax.swing.JScrollPane;&lt;br /&gt;
import javax.swing.JTextField;&lt;br /&gt;
import javax.swing.event.ListSelectionEvent;&lt;br /&gt;
import javax.swing.event.ListSelectionListener;&lt;br /&gt;
public class VacationDisplay extends JFrame implements ActionListener {&lt;br /&gt;
  JawtList empList;&lt;br /&gt;
  JTextField total, btotal;&lt;br /&gt;
  JButton Vac;&lt;br /&gt;
  Employee[] employees;&lt;br /&gt;
  public VacationDisplay() {&lt;br /&gt;
    super(&amp;quot;Vacation Display&amp;quot;);&lt;br /&gt;
    addWindowListener(new WindowAdapter() {&lt;br /&gt;
      public void windowClosing(WindowEvent e) {&lt;br /&gt;
        System.exit(0);&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
    JPanel jp = new JPanel();&lt;br /&gt;
    getContentPane().add(jp);&lt;br /&gt;
    jp.setLayout(new GridLayout(1, 2));&lt;br /&gt;
    empList = new JawtList(10);&lt;br /&gt;
    jp.add(empList);&lt;br /&gt;
    createEmployees();&lt;br /&gt;
    Box box = Box.createVerticalBox();&lt;br /&gt;
    jp.add(box);&lt;br /&gt;
    total = new JTextField(5);&lt;br /&gt;
    total.setHorizontalAlignment(JTextField.CENTER);&lt;br /&gt;
    box.add(total);&lt;br /&gt;
    box.add(Box.createVerticalStrut(10));&lt;br /&gt;
    btotal = new JTextField(5);&lt;br /&gt;
    btotal.setHorizontalAlignment(JTextField.CENTER);&lt;br /&gt;
    box.add(btotal);&lt;br /&gt;
    box.add(Box.createVerticalStrut(10));&lt;br /&gt;
    Vac = new JButton(&amp;quot;Vacations&amp;quot;);&lt;br /&gt;
    box.add(Vac);&lt;br /&gt;
    Vac.addActionListener(this);&lt;br /&gt;
    setSize(300, 200);&lt;br /&gt;
    setVisible(true);&lt;br /&gt;
    total.setText(&amp;quot;  &amp;quot;);&lt;br /&gt;
    total.setBackground(Color.white);&lt;br /&gt;
  }&lt;br /&gt;
  public void createEmployees() {&lt;br /&gt;
    employees = new Employee[7];&lt;br /&gt;
    int i = 0;&lt;br /&gt;
    employees[i++] = new Employee(&amp;quot;Susan Bear&amp;quot;, 55000, 12, 1);&lt;br /&gt;
    employees[i++] = new Employee(&amp;quot;Adam Gehr&amp;quot;, 150000, 9, 0);&lt;br /&gt;
    employees[i++] = new Employee(&amp;quot;Fred Harris&amp;quot;, 50000, 15, 2);&lt;br /&gt;
    employees[i++] = new Employee(&amp;quot;David Oakley&amp;quot;, 57000, 12, 2);&lt;br /&gt;
    employees[i++] = new Employee(&amp;quot;Larry Thomas&amp;quot;, 100000, 20, 6);&lt;br /&gt;
    Boss b = new Boss(&amp;quot;Leslie Susi&amp;quot;, 175000, 16, 4);&lt;br /&gt;
    b.setBonusDays(12);&lt;br /&gt;
    Boss b1 = new Boss(&amp;quot;Laurence Byerly&amp;quot;, 35000, 17, 6);&lt;br /&gt;
    b1.setBonusDays(17);&lt;br /&gt;
    employees[i++] = b;&lt;br /&gt;
    employees[i++] = b1;&lt;br /&gt;
    for (i = 0; i &amp;lt; employees.length; i++) {&lt;br /&gt;
      empList.add(employees[i].getName());&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  public void actionPerformed(ActionEvent e) {&lt;br /&gt;
    VacationVisitor vac = new VacationVisitor();&lt;br /&gt;
    bVacationVisitor bvac = new bVacationVisitor();&lt;br /&gt;
    for (int i = 0; i &amp;lt; employees.length; i++) {&lt;br /&gt;
      employees[i].accept(vac);&lt;br /&gt;
      employees[i].accept(bvac);&lt;br /&gt;
    }&lt;br /&gt;
    total.setText(new Integer(vac.getTotalDays()).toString());&lt;br /&gt;
    btotal.setText(new Integer(bvac.getTotalDays()).toString());&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String argv[]) {&lt;br /&gt;
    new VacationDisplay();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class Employee {&lt;br /&gt;
  int sickDays, vacDays;&lt;br /&gt;
  float Salary;&lt;br /&gt;
  String Name;&lt;br /&gt;
  public Employee(String name, float salary, int vacdays, int sickdays) {&lt;br /&gt;
    vacDays = vacdays;&lt;br /&gt;
    sickDays = sickdays;&lt;br /&gt;
    Salary = salary;&lt;br /&gt;
    Name = name;&lt;br /&gt;
  }&lt;br /&gt;
  public String getName() {&lt;br /&gt;
    return Name;&lt;br /&gt;
  }&lt;br /&gt;
  public int getSickdays() {&lt;br /&gt;
    return sickDays;&lt;br /&gt;
  }&lt;br /&gt;
  public int getVacDays() {&lt;br /&gt;
    return vacDays;&lt;br /&gt;
  }&lt;br /&gt;
  public float getSalary() {&lt;br /&gt;
    return Salary;&lt;br /&gt;
  }&lt;br /&gt;
  public void accept(Visitor v) {&lt;br /&gt;
    v.visit(this);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
abstract class Visitor {&lt;br /&gt;
  public abstract void visit(Employee emp);&lt;br /&gt;
  public abstract void visit(Boss emp);&lt;br /&gt;
}&lt;br /&gt;
class Boss extends Employee {&lt;br /&gt;
  private int bonusDays;&lt;br /&gt;
  public Boss(String name, float salary, int vacdays, int sickdays) {&lt;br /&gt;
    super(name, salary, vacdays, sickdays);&lt;br /&gt;
  }&lt;br /&gt;
  public void setBonusDays(int bonus) {&lt;br /&gt;
    bonusDays = bonus;&lt;br /&gt;
  }&lt;br /&gt;
  public int getBonusDays() {&lt;br /&gt;
    return bonusDays;&lt;br /&gt;
  }&lt;br /&gt;
  public void accept(Visitor v) {&lt;br /&gt;
    v.visit(this);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class VacationVisitor extends Visitor {&lt;br /&gt;
  protected int total_days;&lt;br /&gt;
  public VacationVisitor() {&lt;br /&gt;
    total_days = 0;&lt;br /&gt;
  }&lt;br /&gt;
  public void visit(Employee emp) {&lt;br /&gt;
    total_days += emp.getVacDays();&lt;br /&gt;
  }&lt;br /&gt;
  public void visit(Boss boss) {&lt;br /&gt;
    total_days += boss.getVacDays();&lt;br /&gt;
  }&lt;br /&gt;
  public int getTotalDays() {&lt;br /&gt;
    return total_days;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class bVacationVisitor extends Visitor {&lt;br /&gt;
  int total_days;&lt;br /&gt;
  public bVacationVisitor() {&lt;br /&gt;
    total_days = 0;&lt;br /&gt;
  }&lt;br /&gt;
  public int getTotalDays() {&lt;br /&gt;
    return total_days;&lt;br /&gt;
  }&lt;br /&gt;
  public void visit(Boss boss) {&lt;br /&gt;
    total_days += boss.getVacDays();&lt;br /&gt;
    total_days += boss.getBonusDays();&lt;br /&gt;
  }&lt;br /&gt;
  public void visit(Employee emp) {&lt;br /&gt;
    total_days += emp.getVacDays();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
//this is a simple adapter class to&lt;br /&gt;
//convert List awt methods to Swing methods&lt;br /&gt;
class JawtList extends JScrollPane implements ListSelectionListener, awtList {&lt;br /&gt;
  private JList listWindow;&lt;br /&gt;
  private JListData listContents;&lt;br /&gt;
  public JawtList(int rows) {&lt;br /&gt;
    listContents = new JListData();&lt;br /&gt;
    listWindow = new JList(listContents);&lt;br /&gt;
    listWindow.setPrototypeCellValue(&amp;quot;Abcdefg Hijkmnop&amp;quot;);&lt;br /&gt;
    getViewport().add(listWindow);&lt;br /&gt;
  }&lt;br /&gt;
  public void add(String s) {&lt;br /&gt;
    listContents.addElement(s);&lt;br /&gt;
  }&lt;br /&gt;
  public void remove(String s) {&lt;br /&gt;
    listContents.removeElement(s);&lt;br /&gt;
  }&lt;br /&gt;
  public void clear() {&lt;br /&gt;
    listContents.clear();&lt;br /&gt;
  }&lt;br /&gt;
  public String[] getSelectedItems() {&lt;br /&gt;
    Object[] obj = listWindow.getSelectedValues();&lt;br /&gt;
    String[] s = new String[obj.length];&lt;br /&gt;
    for (int i = 0; i &amp;lt; obj.length; i++)&lt;br /&gt;
      s[i] = obj[i].toString();&lt;br /&gt;
    return s;&lt;br /&gt;
  }&lt;br /&gt;
  public void valueChanged(ListSelectionEvent e) {&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class JListData extends AbstractListModel {&lt;br /&gt;
  private Vector data;&lt;br /&gt;
  public JListData() {&lt;br /&gt;
    data = new Vector();&lt;br /&gt;
  }&lt;br /&gt;
  public int getSize() {&lt;br /&gt;
    return data.size();&lt;br /&gt;
  }&lt;br /&gt;
  public Object getElementAt(int index) {&lt;br /&gt;
    return data.elementAt(index);&lt;br /&gt;
  }&lt;br /&gt;
  public void addElement(String s) {&lt;br /&gt;
    data.addElement(s);&lt;br /&gt;
    fireIntervalAdded(this, data.size() - 1, data.size());&lt;br /&gt;
  }&lt;br /&gt;
  public void removeElement(String s) {&lt;br /&gt;
    data.removeElement(s);&lt;br /&gt;
    fireIntervalRemoved(this, 0, data.size());&lt;br /&gt;
  }&lt;br /&gt;
  public void clear() {&lt;br /&gt;
    int size = data.size();&lt;br /&gt;
    data = new Vector();&lt;br /&gt;
    fireIntervalRemoved(this, 0, size);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
interface awtList {&lt;br /&gt;
  public void add(String s);&lt;br /&gt;
  public void remove(String s);&lt;br /&gt;
  public String[] getSelectedItems();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;/div&gt;</summary>
			</entry>

	</feed>