在我的案例中摆脱类型铸造的模式设计是什么?

时间:2017-03-26 16:53:18

标签: java generics design-patterns structure

public abstract class Employee {
    String name;
    String position
    public Employee(String name, String position) {
      this.name = name;
      this.position = position
   }
 }

public class Pilot extends Employee {
      public Pilot(String name,String position) {
         super();
  }
      public void flight() {//flight the plane}
     //getter and setter for the fields
}

public class Attendance extends Employee {
      public Attendance(String name,String position) {
         super();
  }
      public Food servingFood(String foodName) {}

}

// there will be many other positions


public class Company {

   HashMap<String, ArrayList<Employee>> employeeTable; //values is a list of     workers, key is the position

   public Company() {this.employeeTable = new HashMap<>();}
   public initializeEmployeeTable(file) {} //read file, and create keys in map (file contains information of the position)
  public Worker hireEmployee(String position, String name){
      if (position.equals("pilot")) {  
             Pilot p = Pilot(name);    
              employeeTable.get("pilot").add(p);
              return p
  }
      else if (position.equals("flightAttendance")) {// the else if statement continuous to check the other position; }
 } 

 public Worker callEmployee(String position, String name) {
    for ( Employee e : employeeTable.get(position) ) {
          if e.getName().equals(name) {
                return e;
    }
   }
   return null;
}



public static void main(String[] args) {
  Company company = new Company();
  company.initializeEmployeeTable(filePath);
  File eventFile = new File(filePath); // event file describes what's happening in real world; read the lines, and call the program so that program simulates the real world events
  sc = new Scanner(eventFile);
  do {
      String currentEvent = sc.nextLine();
      String[] currentEventParts = currentEvent.split(", ");
     if (currentEvent[0].equals("New Airplane")) { // currentEvent looks like {"New Airplane", "Attendance"// this part can be other position name, "Linda"}
        Worker w = company.hireEmployee(currentEventParts[1], currentEventParts[2]); }
     else if ((currentEvent[0].equals("flying"))) {
        Worker w = company.callEmployee(currentEvent[0], currentEvent[1])
               if (w.getPosition().equals("Pilot")) {(Worker) w.flight()}
                if (w.getPosition().equals("Attendance")) {(Worker) w.serveFood()}
     }
}

员工有HashMap的原因是因为会有很多职位;并读取事件文件(当第一个索引是“新飞机”时);我不想用如此多的if语句来检查以下索引(将是名称和位置)以创建相应的员工。但是当调用特定方法时,我现在需要类型转换;因为每个方法可以不同(不同的类型参数,返回类型);因此,将这些方法作为超类员工的抽象方法并让子类实现主体是不理想的。

任何建议:员工数据结构;阅读文件策略,模式设计将不胜感激。感谢

0 个答案:

没有答案