Шаблон проектирования "Фабричный метод" FactoryMethod относится к
производящим шаблонам, то есть используется для генерации объектов. Для
реализации этого шаблона у нас должен быть абстрактный класс Product и
абстрактный класс Creator, который работает с абстрактным классом
Product и имеет метод для генерации абстрактного продукта. Далее мы
создаем конкретные варианты продуктов, унаследовав их от абстрактного
класса Product и конкретные классы создателей этих продуктов с
переписанными методами генерации продуктов. Таким образом, мы реализуем
создание и обработку объектов абстрактного типа, оставляя за потомками
право указать конкретный тип объекта, который будет обрабатываться.
Схема паттерна Factory Method (Фабричный метод) Пример:
//абстрактный класс управления настройками приложения abstract class ControlSettings{ public abstract void write(String key, String value); public abstract String read(String key); }
//абстрактный класс с фабричным методом abstract class ControlSettingsCreator{ //фабричный метод Create() - объект какого типа будет создаваться уточним в потомках public abstract ControlSettings Create(); }
class FileControlSettings extends ControlSettings{
@Override public void write(String key, String value) { JOptionPane.showMessageDialog(null, "Записываем в файл настройки ключ: " + key + " значение: " + value + "\n"); }
@Override public String read(String key) { return "Читаем настройки из файла"; }
}
//класс с фабричным методом class FileSettingsCreator extends ControlSettingsCreator{
@Override public ControlSettings Create() { return new FileControlSettings(); }
}
class RegistryControlSettings extends ControlSettings{
@Override public void write(String key, String value) { JOptionPane.showMessageDialog(null, "Записываем в реестр настройки ключ: " + key + " значение: " + value + "\n"); }
@Override public String read(String key) { return "Читаем настройки из реестра"; }
}
//класс с фабричным методом class RegistrySettingsCreator extends ControlSettingsCreator{
@Override public ControlSettings Create() { return new RegistryControlSettings(); }
}
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
//создаем объекты, которые реализуют фабричный метод Create() для создания //конкретных объектов по управлению настройками. FileSettingsCreator fsCreator = new FileSettingsCreator(); RegistrySettingsCreator rsCreator = new RegistrySettingsCreator();
//переменная абстрактного типа с настройками. ControlSettings cs;
//с помощью фабричного метода создаем объект для работы с файлом cs = fsCreator.Create(); cs.write("key1", "value1"); //с помощью фабричного метода создаем объект для работы с реестром cs = rsCreator.Create(); cs.write("key2", "value2");
}
|