Question 1:
Question 2
Question 3:
Question 4:
package company; import company.listFW.*;
public class Employee { private static int _ID = 100; private static int _Count = 0;
private int _empID; private String _name; private AState _state;
public final static Employee CompanyOwner = new Employee(); private Employee() { this("Owner"); _state = Owner.Singleton; }
public Employee(String name) { _ID++; _Count++; _name = name; _empID = _ID; _state = new Worker(); }
public String getName() { return _name; }
public int getID() { return _empID; }
public static int getTotal() { return _Count; }
public void promote(Employee newBoss, IList newTeam) { _state.promote(this, newBoss, newTeam); }
public IList getAllWorkers(IListFactory f) { return _state.getAllWorkers(this, f); }
protected void finalize() { _Count--; }
void setState(AState s) { this._state = s; }
AState getState() { return(_state); }
// Methods needed for the system to be operational: // public IList getSubordinates() { // return _state.getSubordinates(this); // }
// public Employee getBoss() { // return _state.getBoss(this); // } // // public void setBoss(Employee boss) { // _state.setBoss(this, boss); // } //
// // public IList addSubordinate(Employee sub) { // return _state.addSubordinate(this, sub); // } // }
package company; import company.listFW.*;
abstract class AState { abstract void promote(Employee emp, Employee newBoss, IList newTeam); abstract IList getAllWorkers(Employee emp, IListFactory f);
// Methods needed for the system to be operational: // abstract Employee getBoss(Employee emp); // abstract void setBoss(Employee emp, Employee boss); // abstract IList getSubordinates(Employee emp); // abstract IList addSubordinate(Employee emp, Employee sub); }
package company;
import company.listFW.factory.*; import company.listFW.*; import company.listFW.visitor.*;
/** * There is only one owner: Singleton pattern. */ class Owner extends AState {
private static IList _subordinates = CompositeListFactory.Singleton.makeEmptyList(); final static Owner Singleton = new Owner(); private Owner() { }
void promote(Employee emp, Employee newBoss, IList newTeam) { throw new IllegalArgumentException("Cannot promote owner!"); } IList getAllWorkers(Employee emp, IListFactory f) { return (IList)_subordinates.execute(GetIndians.Singleton, f); }
// Methods needed for the system to be operational: // Employee getBoss(Employee emp) { // // to do: code goes here. // return (null); // } // // // void setBoss(Employee emp, Employee boss) { // } // // // IList getSubordinates(Employee emp) { // // to do: code goes here. // return (null); // } // // IList addSubordinate(Employee emp, Employee sub) { // // to do: code goes here. // return (null); // } }
package company;
import company.listFW.*; import company.listFW.visitor.*;
class Manager extends AState { private IList _subordinates; private Employee _boss;
Manager(IList team, Employee boss) { _subordinates = team; _boss = boss; }
void promote(Employee emp, Employee newBoss, IList newTeam) { _boss = newBoss;
// some code to release the old team... // not required as part of the exam question.
_subordinates = newTeam; }
IList getAllWorkers(Employee emp, IListFactory f) { return (IList)_subordinates.execute(GetIndians.Singleton, f); }
// Methods needed for the system to be operational: // Employee getBoss(Employee emp) { // // to do: code goes here. // return (null); // } // // // void setBoss(Employee emp, Employee boss) { // } // // // IList getSubordinates(Employee emp) { // // to do: code goes here. // return (null); // } // // // IList addSubordinate(Employee emp, Employee sub) { // // to do: code goes here. // return (null); // } }
package company;
import company.listFW.*;
class Worker extends AState { private Employee _boss;
void promote(Employee emp, Employee newBoss, IList newTeam) { emp.setState(new Manager(newTeam, newBoss)); // STATE CHANGE! }
IList getAllWorkers(Employee emp, IListFactory f) { return f.makeEmptyList(); }
// Methods needed for the system to be operational: // Employee getBoss(Employee emp) { // // to do: code goes here. // return (null); // } // // // void setBoss(Employee emp, Employee boss) { // } // // // IList getSubordinates(Employee emp) { // // to do: code goes here. // return (null); // } // // IList addSubordinate(Employee emp, Employee sub) { // // to do: code goes here. // return (null); // } }
Last Revised Friday, 23-Feb-2007 12:59:53 CST 02/23/2007