краткое содержание
Дизайн -шаблон - это искусство. Если вы действительно поймете это искусство, вы обнаружите, что мир станет красивее.
определение
Определите интерфейс для создания объекта, пусть его подкласс решит
Используйте сценарии
Везде, где вы используете сложные объекты, вы можете использовать заводский режим
Умл
1. Абстрактная фабрика
Абстрактная фабрика: мы все знаем, что фабрики, как правило, имеют только одну функцию, то есть производство, например, автомобильную фабрику Geely, то есть Geely Automobile, производитель мобильных телефонов iPhone и т. Д., Таким образом, его можно обобщить простым способом, то есть create ();
2. Конкретные автомобильные заводы
Конкретный завод по производству автомобилей: реализует абстрактную фабрику с реальными процессами и методами производства автомобилей и т. Д.
3. Абстрактная машина
Аннотация автомобилей: мы обычно знаем, что автомобили могут бегать, воспроизводить музыку, перемещаться, и поворот - это общие черты автомобилей.
4. Конкретные автомобили
Аннотация автомобиль: Бетонные автомобили осознают абстрактный автомобиль и имеют все его функции. Конечно, разные автомобили могут иметь разные функции.
Вышеупомянутое краткое введение в основном состоит в том, что конкретные автомобильные фабрики производят соответствующие автомобили, такие как фабрики Audi, Volkswagen Factory, Volkswagen Cars и т. Д.
Код демо
Мы четко поняли взаимосвязь между ними выше, поэтому мы будем использовать код, чтобы продемонстрировать наши идеи и логику выше в коде:
(1) Абстрактная автомобильная фабрика
Пакет com.zengtao.demo.factory;/*** Abstract Factory*/Public Abstract Class Carfactory {public Abstract <T Extends Car> T CreateCar (Class <t> cla);}(2) Конкретная автомобильная фабрика
Пакет com.zengtao.demo.factory;/*** Audi Factory*/Public Class Audifactory Extens Carfactory {@SuppressWarnings ("Unchecked") @Override public <T Extens Car> t CreateCar (Class <T> CLA) {CAR CAR = null; try {car = (car) class.forname (cla.getName ()). newInstance (); } catch (Exception e) {e.printstackTrace (); } return (t) автомобиль; }}(3) Определение абстрактной машины
Пакет com.zengtao.demo.factory; открытый абстрактный класс Car {public rastract void drive (); Public Abstract void SelfNagive (); Public Abstract void playmusic ();}(4) Конкретный автомобиль
(Audi Q3)
пакет com.zengtao.demo.factory; открытый класс Audiq3car Extends audicar {@override public void drive () {System.out.println ("Audiq3car был успешно изготовлен"); System.out.println ("Audiq3car Drive"); } @Override public void selfNagive () {System.out.println ("audiq3car sellagive"); } @Override public void playmusic () {system.out.println ("audiq3car selfnagive"); } @Override public void playmusic () {System.out.println ("audiq3car playmusic"); System.out.println ("" "); }}(Audi Q5)
пакет com.zengtao.demo.factory; открытый класс audiq5car extends audicar {@override public void drive () {System.out.println ("Audiq5car был успешно изготовлен"); System.out.println ("Audiq5car Drive"); } @Override public void selfNagive () {System.out.println ("audiq5car selfnagive"); } @Override public void playmusic () {System.out.println ("audiq5car selfnagive"); } @Override public void playmusic () {System.out.println ("audiq5car playmusic"); System.out.println ("" "); }}(5) позвонить
пакет com.zengtao.demo; import com.zengtao.demo.factory.audifactory; import com.zengtao.demo.factory.audiq3car; импорт com.zengtao.demo.factory.audiq5car; public class main {public static void main [] str) { / create a adifact adifactory = Audifactory (); // Использование завода, чтобы сделать Q3 CAR Audiq3car audiq3car = audiofactory.createcar (audiq3car.class); // Использование завода, чтобы сделать Q5 Car Audiq5car audiq5car = audifactory.createcar (audiq5car.class); // начинать вождение и воспроизводить музыку audiq3car.drive (); audiq3car.playmusic (); audiq5car.drive (); audiq5car.playmusic (); }}(6) Результаты
Что касается вышесказанного, метод завода используется для реализации простого процесса производства автомобиля.
Первый пункт:
На абстрактной фабрике мы видим, что метод CreateCar (Class CLA), почему мы определяем его так? Используйте отражение, чтобы создать конкретный автомобиль. Таким образом, наши различные типы автомобилей нуждаются только в соответствующих условиях, могут ли они быть произведены? Поэтому полезно писать таким образом, как и многие, Audi имеет Q3, Q5, A4, A6, A7, A8 и другие серии.
Второй пункт:
Если у нас есть другие автомобили, такие как BMW, которые также имеют BMW X1, 320, X5 и т. Д., Мы также можем реализовать его очень просто, просто реализовать абстрактную фабрику, а затем реализовать абстрактный автомобиль в конкретном автомобиле, и расширение также очень удобно.
Суммировать
Пришло время выйти из абстрактной фабрики здесь. Модель метода завода является относительно простой и хорошей моделью дизайна.
Но есть также недостатки, такие как: если есть новые и другие типы автомобилей, вам нужно только внедрить абстрактные фабрики и абстрактные автомобили, а затем создать два новых класса
Но если это не автомобиль, а мобильный телефон, то вам нужно написать все это, что приведет к появлению множества классов, независимо от того, принять ли модель метода заводского метода или решать на основе потребностей.
Примечание: не применяйте шаблоны дизайна для дизайна. Конечно, обычно используются заводские паттерны метода, такие как: метод активности, мы также загружаем и генерируем соответствующие интерфейсы на основе определения компоновки XML и т. Д.
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.