| StringHistoryReverser.java |
package lectures.inheritance;
import util.annotations.WebDocuments;
import bus.uigen.ObjectEditor;
@WebDocuments({"Lectures/Inheritance.pptx", "Lectures/Inheritance.pdf", "Videos/Inheritance.avi"})
public class StringHistoryReverser {
public static final String ELEMENT_1 = "Joe Doe";
public static final String ELEMENT_2 = "Jane Doe";
public static BaseStringHistory reverse(BaseStringHistory anOriginal) {
BaseStringHistory retVal = StringHistoryFactory.createStringHistory();
for (int aHistoryIndex = anOriginal.size() -1; aHistoryIndex >= 0; aHistoryIndex--) {
retVal.addElement(anOriginal.elementAt(aHistoryIndex));
}
return retVal;
}
/*
* The reverse method in StringHistoryReverser can reverse instances of:
* (a) ABaseStringHistory
* (b) AnInheritingStringDatabase
* (c) AnInheritingStringStringSet
* (d) String
*/
public static void main (String[] args) {
BaseStringHistory aHistory = StringHistoryFactory.createStringHistory();
aHistory.addElement(ELEMENT_1);
aHistory.addElement(ELEMENT_1);
aHistory.addElement(ELEMENT_2);
aHistory.addElement(ELEMENT_2);
BaseStringHistory aReversedHistory= reverse(aHistory);
ObjectEditor.edit(aHistory);
ObjectEditor.edit(aReversedHistory);
}
/*
* Run the program and see the two displays created.
* Go back to StringHistoryFactory and switch to the alternate return statement
* in the factory method.
* Run main again and observe the displays.
*
*
* Which tasks is class StringHistoryFactory responsible for:
*
* (a) Creating an implementation a BaseStringHistory.
* (b) Choosing an implementation of BaseStringHistory.
* (c) Reversing a BaseStringHistory
*
* Which tasks is class StringHistoryReverser responsible for:
* (a) Creating an implementation a BaseStringHistory.
* (b) Choosing an implementation of BaseStringHistory.
* (c) Reversing a BaseStringHistory.
*
* Which tasks is class ABaseStringHistory responsible for:
* (a) Creating an implementation a BaseStringHistory.
* (b) Choosing an implementation of BaseStringHistory.
* (c) Reversing a BaseStringHistory
*
* (T/F) Implementing an interface and using (operating on) the interface are separate
* concerns
*
* (T/F) Operating on an interface and choosing which implementation of the interface is
* used are separate concerns.
*
* (T/F) Factory methods support separation of concerns.
*/
/*
* THE END
*/
}