| CSC 207 | Algorithms and Object Oriented Design | Spring 2009 |
Summary: In this lab, you will get a concrete look at a brief motivating example of the state pattern.
/** A class that prints out messages of various types in several
* languages */
public class MultiLingualMessages {
public enum Language {English, French, Spanish, Chef};
private Language lang;
public Language getLanguage() { return lang; }
public void setLanguage(Language lang) {
this.lang = lang;
}
/** Print a question in the appropriate language */
public void printQuestion() {
String msg = "";
switch(lang) {
case English: msg = "What?"; break;
case Spanish:
case French: msg = "Que?"; break;
case Chef: msg = "Bork?"; break;
}
System.out.println(msg);
}
/** Print an exclamation in the appropriate language */
public void printExclamation() {
String msg;
switch(lang) {
case English: msg = "Whoah!"; break;
case Spanish: msg = "¡Caramba!"; break;
case French: msg = "Par bleu!"; break;
case Chef: msg = "Bork!";
}
System.out.println(msg);
}
}
Messenger that has two
operations, one for fetching an exclamation String
and another for fetching the question String. (Note
that your return types should not be void.)
FrenchMessenger
and ChefMessenger. You only need to write two,
one-line methods for each, and you need no object or class variables.
enum LanguageMultiLingualMessages above, we can
use a Messenger object. Thus, the class below provides a
"context" for a particular messenger.
/** A class that prints out messages of various types in several
* languages using the state pattern. */
public class MessengerContext {
private Messenger messenger;
public void setMessenger(Messenger msgr) {
messenger = msgr;
}
public void printQuestion() {
// BODY HERE
}
public void printExclamation() {
// BODY HERE
}
}
Messenger interface.
MultiLingualMessages?