Определение заводского шаблона: предоставляет интерфейс для создания объектов.
Зачем использовать фабричный режим
Заводская модель - это наиболее часто используемая модель, которую мы используем.
Почему заводская модель так часто используется? Поскольку заводской шаблон эквивалентен созданию новых объектов экземпляра, нам часто приходится генерировать объекты экземпляров на основе класса. Нужно быть более осторожным.
Давайте возьмем пример примера.
Кода -копия выглядит следующим образом:
Образец образец = новый образцо ();
Однако реальность такова, что мы обычно выполняем некоторую работу по инициализации при создании примеров экземпляров, таких как базы данных запросов назначения и т. Д.
Прежде всего, мы думаем о том, что мы можем использовать конструктор выборки, чтобы экземпляр генерируется и написан как:
Кода -копия выглядит следующим образом:
Образец образец = новый выборка (параметр);
Однако, если инициализация, выполненная при создании образца экземпляра, не так проста, как назначение, это может быть длинным кусочком кода.
Почему код уродлив? Метод эквивалентен вкладыванию в него много яиц. Длинный код отправляйте в каждый сегмент, и сегмент снова «инкапсулирован» (уменьшение соединения связи между сегментами), чтобы риски были диверсифицированы. Нет больше вещей, которые будут влиять на каждый сегмент.
В этом примере, во -первых, нам необходимо отделить работу по созданию экземпляра от работы по использованию экземпляра, то есть разделить большой объем инициализации, необходимых для создания экземпляра из конструктора выборки.
В настоящее время нам нужен заводской шаблон для создания объектов, и мы больше не можем использовать простой новый образцы (параметры). Кроме того, если образец имеет наследование, такое как MySample, согласно программированию, ориентированному на интерфейс, нам нужно абстрагировать выборку в интерфейс. Теперь образец - это интерфейс, с двумя подклассами MySample и Hissample. Когда мы хотим их создавать, следующим образом:
Кода -копия выглядит следующим образом:
Образец mySample = new MySample ();
Поскольку проект углубляется, выборка может «вывести много сыновей», поэтому нам нужно создать экземпляр этих сыновей один за другим неизбежно в традиционных программах.
Но если вы сознательно используете заводскую модель с самого начала, эти проблемы исчезли.
Фабричный метод
Вы построите фабрику, которая специализируется на производстве экземпляров образца:
Кода -копия выглядит следующим образом:
Фабрика открытого класса {
Public Static Sample Creator (int) {
// getClass генерировать образец В целом, динамическая загрузка класса может использоваться для загрузки классов.
if (что == 1)
вернуть новую пробку ();
иначе if (что == 2)
вернуть новый образец ();
}
}
Затем в вашей программе, если вы хотите создать экземпляр образца, используйте код кода копии следующим образом:
Sample Samplea = Factory.Creator (1);
Таким образом, конкретный подкласс выборки не участвует во всем процессе. Чем проще делать ошибки. Каждый, кто проделал конкретную работу, имеет глубокое понимание этого. Кажется, что мы также можем понять принципы жизни от программирования?
Используйте заводские методы, чтобы обратить внимание на несколько ролей. Для генерации образца продукта, как показано на рисунке ниже.
Чтобы быть более сложным, он должен расширить заводский класс, который также наследует его класс внедрения ConcreteFactory.
Абстрактная фабрика
Заводская модель включает в себя: фабричный метод и абстрактный завод.
Разница между этими двумя шаблонами заключается в сложности создания объектов. Если наш метод создания объекта становится сложным, как и в приведенном выше фабричном методе, он должен создать образец объекта, если у нас есть новый образцы интерфейса продукта.
Предполагая здесь: Sample имеет два бетонных класса Samplea и Samleb, а Sample2 также имеет два конкретных класса Sample2a и Sampleb2. Различные части подкласса различных частей, следующее, чтобы расширить фабрику в приведенном выше примере на абстрактную фабрику:
Кода -копия выглядит следующим образом:
публичный абстрактный класс фабрика {
общественный абстрактный образец Creator ();
Public Abstract Sample2 Creator (название строки);
}
открытый класс SimpleFactory Extends Factory {
Общественный образец Creator () {......... вернуть новую пробку}
Public Sample2 Creator (String name) {......... вернуть новый образец 2A}
}
Общедоступный класс Bombfactory Extends Factory {
Общественный образец Creator () {...... вернуть новый образец}
Public Sample2 Creator (String name) {...... вернуть новый образец2b}
}
Из вышеизложенного каждая из них производит набор образцов и образца2.
Есть еще один ключевой момент в абстрактной фабрике, потому что существует определенная связь между методами, которые производят выборку и выборку Например, процесс объединен: производственный процесс относительно прост, поэтому имя простое.
В практических приложениях метод завода используется чаще, и он в сочетании с динамическими классовыми погрузчиками.
Примеры модели фабрики Java
Давайте возьмем Джайв ForumFactory в качестве примера.
Кода -копия выглядит следующим образом:
публичный абстрактный класс ForumFactory {
Частный статический объект initlock = new Object ();
Public Static ForumFactory GetInstance (авторизация разрешения) {
// Если действительное разрешение не пройдет, верните NULL.
if (Authorization == null) {return null;
// Следующее использует синглтонский режим синглтона
if (factory == null) {
синхронизированный (initlock) {
if (factory == null) {......
пытаться {
// динамическая перепечатка
Класс C = class.forname (classname);
factory = (forumFactory) c.newinStance ();
} catch (Exception e) {return null;
}
}
}
// теперь вернуть прокси.
вернуть новый ForumFactoryProxy (авторизация, фабрика, factory.getpermissions (авторизация));
}
// Метод создания форума завершается подклассом, наследующим ForumFactory.
Общественный реферат Forum CreateForum (имя строки, описание строки)
бросает несанкционированное искусство, ForumalReadyExistSexception;
....
}
Поскольку Jive теперь хранит сообщения на форуме и другие данные контента через систему базы данных, если вы хотите изменить его для реализации через файловую систему, этот Factory Method ForumFactory предоставляет динамический интерфейс:
Кода -копия выглядит следующим образом:
Private Static String className = "com.jivesoftware.forum.database.dbforumFactory";
Вы можете использовать метод, который вы разработали для создания форума вместо com.jivesoftware.forum.database.dbforumfactory.
В приведенном выше коде есть три режима. Форум доступа: один, если вы являетесь зарегистрированным пользователем и гостем, то соответствующие разрешения будут разными, и это разрешение проходит через всю систему.
Проверьте CatalogdaOfactory в Java Pet Store:
Кода -копия выглядит следующим образом:
открытый класс CatalogdaOfactory {
/**
* Этот метод разрабатывает специальный подкласс для реализации шаблона DAO.
* Конкретное определение подкласса находится в дескрипторе развертывания J2EE.
*/
Public Static Catalogdao getDao () бросает каталогдаосисексапс {
Catalogdao catdao = null;
пытаться {
InitialContext IC = new initialContext ();
// динамическая загрузка Catalog_DAO_CLASS
// Вы можете определить свой собственный Catalog_DAO_CLASS, чтобы вам не нужно менять слишком много кода
// завершить огромные изменения системы.
String classname = (string) ic.lookup (jndinames.catalog_dao_class);
catdao = (catalogdao) class.forname (classname) .newinstance ();
} catch (namingexception ne) {
бросить новый каталогдаосисексация ("catalogdaOfactory.getDao: namingexception, получая тип DAO: /n" + ne.getMessage ());
} catch (Exception Se) {
бросить новый каталогдаосисексация ("catalogdaOfactory.getDao: исключение при получении DAO Type: /n" + se.getMessage ());
}
вернуть Catdao;
}
}
CatalogdaOfactory - это типичный фабричный метод. .. Реализуйте подклассы и дайте свое собственное имя подкласса переменной Catalog_DAO_CLASS.
Можно видеть, что заводский метод обеспечивает очень гибкий и мощный механизм динамического расширения для структуры системы. возможно изменить функции системы при преобразовании.