В этой статье описывается заводская модель модели дизайна Java. Поделитесь этим для вашей ссылки, следующим образом:
1. Простая фабрика
Давайте сначала подумаем о вопросе. Когда мы пишем программы, будет такая ситуация. Объект A должен вызвать метод объекта B. В настоящее время мы обычно используем новое ключевое слово для создания экземпляра B, а затем вызовут метод экземпляра B. Недостаток этого подхода состоит в том, что метод класса A напрямую вызывает имя класса класса B (этот метод также называется жесткой связкой). Как только систему необходимо рефакторировать: когда класс C необходимо использовать вместо класса B, программа должна изменить код класса A. Если 100 или 10 000 классов в приложении имеют жесткий кодирование, необходимо изменить 100 или 10 000 мест, что, очевидно, очень ужасная вещь.
Глядя на эту проблему с другой точки зрения: для уже объекта A он должен только вызывать метод объекта B и не заботиться о процессе реализации и создания объекта B, рассмотрите возможность позволить классу B реализовать интерфейс IB, в то время как класс A только должен быть связан с интерфейсом IB - класс A не использует новые ключевые слова для создания B, но для того, чтобы использовать метод, используется, что это за фавориальное, что является IBFACTORY, что это за фавориальное, что это является. Вызов IBFactory Factory, чтобы получить экземпляры IB. С помощью вышеуказанного дизайна: если вам нужно использовать класс C вместо класса B, вам нужно только позволить классу C реализовать интерфейс IB и переписать код реализации для создания экземпляра IB на фабрике IBFactory, чтобы заводская фабрика могла генерировать экземпляр C. Этот метод дизайна передачи нескольких объектов класса на заводские классы для генерации называется простым заводским шаблоном.
Вот код для простого заводского шаблона:
/*** Простой фабричный режим* Общий интерфейс, который требует заводских экземпляров объекта* Интерфейс причесок* @author Administrator**/Public Interface Hair {/*** Draw Hairstyle*/public void draw ();}/*** Left Sate Distribution Hairstyle* @authortor**/Public Lefthair Implysired Hair-Hairstyle* @author*/Public Public lefthair { @ @@aover System.out.println("-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- * */public class Righthair реализует волосы {@override public void draw () { System.out.println ("------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Администратор * */public hairtest {public void main (string [] args) {hairfactory factory = new Hairfactory ();Как вы можете видеть, если вы хотите изменить левша, генерируемую в Hairtest на Righthair, вам просто нужно изменить реализацию метода Gethair в HairFactory.
Преимущество использования простого заводского режима состоит в том, что он отделяет вызывающего объекта и процесс создания объекта. Когда вызывающему объекту нужен объект, он может напрямую запросить его на заводе, тем самым избегая вызывающего абонента объекта и класса реализации объекта, связанного с жестким кодированием, чтобы улучшить обслуживание и масштабируемость системы. Конечно, заводская модель также имеет небольшой недостаток. Когда продукт изменен, заводский класс также должен быть изменен соответственно. Здесь вы можете использовать модель политики для ее решения. Ниже приведен код.
Public Interface Hairbuilder { / *** Make Hairstyle* @return* / public gethair ();} public Class Lefthairbuilder реализует Hairbuilder {@Override public ghateair () {return new Lefthair (); }} public Class Righthairbuilder реализует Hairbuilder {@Override public ghor gethair () {return new righthair (); }} public class hairfactory {private Hairbuilder Hairbuilder; Public HairFactory (Hairbuilder Hairbuilder) {this.hairbuilder = Hairbuilder; } public void sethairbuilder (Hairbuilder Hairbuilder) {this.hairbuilder = Hairbuilder; } public Hair gethair () {return hairbuilder.gethair (); }} public class hairtest {public static void main (string [] args) {// hairbuilder builder = new Lefthairbuilder (); Hairbuilder Builder = new Righthairbuilder (); HairFactory Factory = новый HairFactory (Builder); Волосы волосы = factory.gethair (); hair.draw (); }}Преимущество этого подхода заключается в том, что больше нет необходимости изменять заводский класс и абстрагировать логику создания на заводе в соответствии с различными стратегиями. Какие объекты должны создать программу? Просто передайте соответствующий строитель в сетевой завод.
2. Заводский метод
В простой заводской модели система использует класс заводского класса для производства всех экземпляров продукта, и класс заводов решает, какой класс экземпляров для создания, то есть заводской класс несет ответственность за все логические суждения, создание экземпляров и другую работу.
Если вы не хотите выносить логические суждения в классе фабрики, программа может предоставлять различные фабрики для различных категорий продуктов, а различные фабричные классы производят разные продукты, не делая сложных логических суждений в классе фабрики. Это немного похоже на простую заводскую модель в сочетании с стратегической моделью выше. Разница в том, что у первого есть только одна фабрика, в то время как последняя требует нескольких заводов. Ниже приведен код для заводского метода шаблона.
/*** Заводской шаблон метода* Общий интерфейс, который должен быть реализован экземплярами объекта, создаваемыми заводской* @author Administrator**/Public Interface Person {public void Drawperson ();} открытый класс человек реализует человека {@Override public void Drawperson () {{ System.out.println("---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- System.out.println ("--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- @author Administer * */Public Class WomenCastory реализует PersonFactory {@Override public getPerson () {return new Women (); factory.getperson ();Типичная особенность такого рода заключается в том, что он производит соответствующие продукты в соответствии с различными фабриками в коде клиента, и нет необходимости помещать всю сложную логику в класс фабрики для суждения. В этой реализации существует очевидный недостаток, который заключается в том, что клиент в сочетании с классом завода.
3. Абстрактная фабрика
Используя приведенную выше архитектуру проектирования заводского метода, клиент -код успешно отделен от класса реализации вызываемого объекта, но он приносит другую связь: клиент -код сочетается с различными заводскими классами. Чтобы решить эту проблему сцепления, рассмотрите возможность добавления фабричного класса для генерации заводских экземпляров и отделения фабрики от клиента для производства продуктов. Этот метод проектирования называется абстрактной заводской моделью. Ниже приведен код для абстрактного заводского шаблона
/*** Абстрактная заводская шаблон* Заводская производительность PersonFactory* @Author Administrator**/Public Class PersonFactoryFactory {public Static PersonFactory GetPersonFactory (String Type) {if (type.EqualsIgnoreCase ("man")) {return new manfactory (); } else {return new womensfactory (); }}}/** * Класс клиента * @author Administrator * */Public Class PersonTest {public static void main (string [] args) {personfactory factory = personfactoryfactory.getPersonFactory ("man"); Person Person = factory.getPerson (); Person.drawperson (); }}Для получения дополнительного контента, связанного с Java, читатели, заинтересованные в этом сайте, могут просмотреть темы: «Учебное пособие по структуре данных Java и алгоритм», «Сводка операции Java Operation Dom Узел», «Краткое изложение Java File и Directory Commine» и «Советы по эксплуатации Java Cache»
Я надеюсь, что эта статья будет полезна для всех Java Programming.