Я использую вариант абстрактного фабричного шаблона, как определено в http://en.wikipedia.org/wiki/Abstract_factory
Шаблон закодирован в Википедии примерно так -
/* GUIFactory example -- */
interface GUIFactory {
public Button createButton();
}
class WinFactory implements GUIFactory {
public WinButton createButton() {
return new WinButton();
}
}
class OSXFactory implements GUIFactory {
public OSXButton createButton() {
return new OSXButton();
}
}
interface Button {
public void paint();
}
class WinButton implements Button {
public void paint() {
System.out.println("I'm a WinButton");
}
}
class OSXButton implements Button {
public void paint() {
System.out.println("I'm an OSXButton");
}
}
class Application {
public Application(GUIFactory factory) {
Button button = factory.createButton();
button.paint();
}
}
public class ApplicationRunner {
public static void main(String[] args) {
new Application(createOsSpecificFactory());
}
public static GUIFactory createOsSpecificFactory() {
int sys = readFromConfigFile("OS_TYPE");
if (sys == 0) {
return new WinFactory();
} else {
return new OSXFactory();
}
}
}
Я использую его немного по-другому, поскольку мне не нужен дополнительный слой абстракции для переопределения поведения рисования в реализациях Button.
Мой код -
//Implmentation code
MainMenuButtonFactory mainMenuButtonFactory = new SyncButtonFactory();
BitmapButtonField refreshButton = mainMenuButtonFactory.createButton();
public interface MainMenuButtonFactory {
BitmapButtonField createButton();
}
public class SyncButtonFactory implements MainMenuButtonFactory{
public BitmapButtonField createButton() {
return new BitmapButtonField(ButtonImageFactory.getResyncBitmap(),
ButtonImageFactory.getResyncBitmapHighlight()){
public boolean navigationClick(int status, int time)
{
FutureContent.future.clearContent();
ScreenController.displayNextScreen(new UpdatingScreenAnimation(Constants.MAIN_MENU_SCREEN));
return super.navigationClick(status, time);
}
};
}
}
public class JudgeButtonFactory implements MainMenuButtonFactory{
public BitmapButtonField createButton() {
BitmapButtonField judgeButton = new BitmapButtonField(ButtonImageFactory.getJudgeBitmap(),
ButtonImageFactory.getJudgeBitmapHighlight()){
public boolean navigationClick(int status, int time)
{
RatingsScreenController ratingsScreenController = new RatingsScreenController("MainMenuScreen");
Thread t = new Thread(ratingsScreenController);
t.start();
return super.navigationClick(status, time);
}
};
return judgeButton;
}
}
Это все еще действующий абстрактный шаблон фабричного проектирования?