Java访问者模式 : 访问者模式 « 设计模式 « Java

En
Java
1. 图形用户界面
2. 三维图形动画
3. 高级图形
4. 蚂蚁编译
5. Apache类库
6. 统计图
7. 
8. 集合数据结构
9. 数据类型
10. 数据库JDBC
11. 设计模式
12. 开发相关类
13. EJB3
14. 电子邮件
15. 事件
16. 文件输入输出
17. 游戏
18. 泛型
19. GWT
20. Hibernate
21. 本地化
22. J2EE平台
23. 基于J2ME
24. JDK-6
25. JNDI的LDAP
26. JPA
27. JSP技术
28. JSTL
29. 语言基础知识
30. 网络协议
31. PDF格式RTF格式
32. 映射
33. 常规表达式
34. 脚本
35. 安全
36. Servlets
37. Spring
38. Swing组件
39. 图形用户界面
40. SWT-JFace-Eclipse
41. 线程
42. 应用程序
43. Velocity
44. Web服务SOA
45. 可扩展标记语言
Java 教程
Java » 设计模式 » 访问者模式屏幕截图 
Java访问者模式
Java访问者模式

/*
The Design Patterns Java Companion

Copyright (C) 1998, by James W. Cooper

IBM Thomas J. Watson Research Center

*/

import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.Vector;

import javax.swing.AbstractListModel;
import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;

public class VacationDisplay extends JFrame implements ActionListener {
  JawtList empList;

  JTextField total, btotal;

  JButton Vac;

  Employee[] employees;

  public VacationDisplay() {
    super("Vacation Display");
    addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent e) {
        System.exit(0);
      }
    });

    JPanel jp = new JPanel();
    getContentPane().add(jp);
    jp.setLayout(new GridLayout(12));
    empList = new JawtList(10);
    jp.add(empList);

    createEmployees();

    Box box = Box.createVerticalBox();
    jp.add(box);
    total = new JTextField(5);
    total.setHorizontalAlignment(JTextField.CENTER);
    box.add(total);
    box.add(Box.createVerticalStrut(10));
    btotal = new JTextField(5);
    btotal.setHorizontalAlignment(JTextField.CENTER);
    box.add(btotal);
    box.add(Box.createVerticalStrut(10));
    Vac = new JButton("Vacations");
    box.add(Vac);
    Vac.addActionListener(this);
    setSize(300200);
    setVisible(true);
    total.setText("  ");
    total.setBackground(Color.white);

  }

  public void createEmployees() {
    employees = new Employee[7];
    int i = 0;
    employees[i++new Employee("Susan Bear"55000121);
    employees[i++new Employee("Adam Gehr"15000090);
    employees[i++new Employee("Fred Harris"50000152);
    employees[i++new Employee("David Oakley"57000122);
    employees[i++new Employee("Larry Thomas"100000206);
    Boss b = new Boss("Leslie Susi"175000164);
    b.setBonusDays(12);
    Boss b1 = new Boss("Laurence Byerly"35000176);
    b1.setBonusDays(17);
    employees[i++= b;
    employees[i++= b1;

    for (i = 0; i < employees.length; i++) {
      empList.add(employees[i].getName());
    }
  }

  public void actionPerformed(ActionEvent e) {
    VacationVisitor vac = new VacationVisitor();
    bVacationVisitor bvac = new bVacationVisitor();
    for (int i = 0; i < employees.length; i++) {
      employees[i].accept(vac);
      employees[i].accept(bvac);
    }
    total.setText(new Integer(vac.getTotalDays()).toString());
    btotal.setText(new Integer(bvac.getTotalDays()).toString());
  }

  public static void main(String argv[]) {
    new VacationDisplay();
  }
}

class Employee {
  int sickDays, vacDays;

  float Salary;

  String Name;

  public Employee(String name, float salary, int vacdays, int sickdays) {
    vacDays = vacdays;
    sickDays = sickdays;
    Salary = salary;
    Name = name;
  }

  public String getName() {
    return Name;
  }

  public int getSickdays() {
    return sickDays;
  }

  public int getVacDays() {
    return vacDays;
  }

  public float getSalary() {
    return Salary;
  }

  public void accept(Visitor v) {
    v.visit(this);
  }
}

abstract class Visitor {
  public abstract void visit(Employee emp);

  public abstract void visit(Boss emp);
}

class Boss extends Employee {
  private int bonusDays;

  public Boss(String name, float salary, int vacdays, int sickdays) {
    super(name, salary, vacdays, sickdays);
  }

  public void setBonusDays(int bonus) {
    bonusDays = bonus;
  }

  public int getBonusDays() {
    return bonusDays;
  }

  public void accept(Visitor v) {
    v.visit(this);
  }
}

class VacationVisitor extends Visitor {
  protected int total_days;

  public VacationVisitor() {
    total_days = 0;
  }

  public void visit(Employee emp) {
    total_days += emp.getVacDays();
  }

  public void visit(Boss boss) {
    total_days += boss.getVacDays();
  }

  public int getTotalDays() {
    return total_days;
  }
}

class bVacationVisitor extends Visitor {
  int total_days;

  public bVacationVisitor() {
    total_days = 0;
  }

  public int getTotalDays() {
    return total_days;
  }

  public void visit(Boss boss) {
    total_days += boss.getVacDays();
    total_days += boss.getBonusDays();
  }

  public void visit(Employee emp) {
    total_days += emp.getVacDays();
  }
}
//this is a simple adapter class to
//convert List awt methods to Swing methods

class JawtList extends JScrollPane implements ListSelectionListener, awtList {
  private JList listWindow;

  private JListData listContents;

  public JawtList(int rows) {
    listContents = new JListData();
    listWindow = new JList(listContents);
    listWindow.setPrototypeCellValue("Abcdefg Hijkmnop");
    getViewport().add(listWindow);

  }

  public void add(String s) {
    listContents.addElement(s);
  }

  public void remove(String s) {
    listContents.removeElement(s);
  }

  public void clear() {
    listContents.clear();
  }

  public String[] getSelectedItems() {
    Object[] obj = listWindow.getSelectedValues();
    String[] s = new String[obj.length];
    for (int i = 0; i < obj.length; i++)
      s[i= obj[i].toString();
    return s;
  }

  public void valueChanged(ListSelectionEvent e) {
  }

}

class JListData extends AbstractListModel {
  private Vector data;

  public JListData() {
    data = new Vector();
  }

  public int getSize() {
    return data.size();
  }

  public Object getElementAt(int index) {
    return data.elementAt(index);
  }

  public void addElement(String s) {
    data.addElement(s);
    fireIntervalAdded(this, data.size() 1, data.size());
  }

  public void removeElement(String s) {
    data.removeElement(s);
    fireIntervalRemoved(this, 0, data.size());
  }

  public void clear() {
    int size = data.size();
    data = new Vector();
    fireIntervalRemoved(this, 0, size);
  }
}

interface awtList {
  public void add(String s);

  public void remove(String s);

  public String[] getSelectedItems();

}



           
       
Related examples in the same category
1. 访问者模式1
2. 访问者模式-范例
www.java2java.com | Contact Us
Copyright 2010 - 2030 Java Source and Support. All rights reserved.
All other trademarks are property of their respective owners.