Поскольку статья о подсчете слов Nuggets ограничена
20000
Внутри часть была удалена, вы можете перейти кgithub
Посмотреть полный текстПолное введение в шаблоны проектирования (45 типов), в этой статье рекомендуетсякитайская версия шаблонов дизайна для людейсмотреть вместе.
Рекомендуемое чтение
- Полное введение в шаблоны проектирования (45 типов)
- китайская версия design-patterns-for-humans (репозиторий github постоянно обновляется)
- Кураторский список ресурсов, библиотек, инструментов и приложений MongoDB на китайском языке.
- Какие есть малоизвестные, но интересные сайты?
- Записка осадного льва
- Собирайте отличные проекты на Github каждый день
- несколько интересных народных сказок
- Очень простой в использовании Google Chrome, Sublime Text, Phpstorm, коллекция плагинов для масляных обезьян.
Шаблоны проектирования представляют собой передовой опыт и обычно используются опытными разработчиками объектно-ориентированного программного обеспечения. Шаблоны проектирования — это решения общих проблем, с которыми разработчики программного обеспечения сталкиваются во время разработки программного обеспечения. Эти решения являются результатом длительного периода проб и ошибок многочисленных разработчиков программного обеспечения.
Шаблон проектирования — это набор повторяющихся, общеизвестных, классифицированных и систематизированных сводок опыта разработки кода. Шаблоны проектирования используются для повторного использования кода, облегчения его понимания другими и обеспечения надежности кода. Нет никаких сомнений в том, что шаблоны проектирования являются беспроигрышными для себя, других и систем.Шаблоны проектирования делают компиляцию кода по-настоящему инженерной.Шаблоны проектирования являются краеугольным камнем разработки программного обеспечения, точно так же, как кирпичи здания. Разумное использование паттернов проектирования в проектах может прекрасно решить многие проблемы.Каждый паттерн имеет соответствующий принцип в реальности, чтобы соответствовать ему.Основное решение, поэтому паттерны проектирования можно широко использовать.
Типы шаблонов проектирования
Всего существует 23 шаблона дизайна. Эти шаблоны можно разделить на три основные категории:
- Шаблоны создания. Эти шаблоны проектирования позволяют скрыть логику создания при создании объекта вместо использования оператора new для непосредственного создания экземпляра объекта. Это делает программу более гибкой при принятии решения о том, какие объекты необходимо создать для данного экземпляра.
-
Структурные шаблоны. Эти шаблоны проектирования сосредоточены на композиции классов и объектов. Концепция наследования используется для составления интерфейсов и определения способа получения составными объектами новой функциональности.
- Шаблон адаптера
- Шаблон моста
- Шаблон фильтра (Filter, Criteria Pattern)
- Составной узор
- Шаблон декоратора
- Фасадный узор
- Модель наилегчайшего веса
- Шаблон прокси
- Режим сопоставления данных* (сопоставление данных)
- Режим внедрения зависимостей* (внедрение зависимостей)
- Фасадный режим* (Фасад)
- Режим интерфейса потока* (свободный интерфейс)
- Режим регистрации * (Реестр)
- Поведенческие шаблоны. Эти шаблоны проектирования специально ориентированы на общение между объектами.
- Шаблоны проектирования J2EE. Эти шаблоны проектирования ориентированы конкретно на уровень представления. Эти шаблоны идентифицируются Sun Java Center.
Далее используется изображение для описания взаимосвязи между шаблонами проектирования в целом:
Шесть принципов шаблонов проектирования
1. Принцип открытия-закрытия
Принцип «открыто-закрыто» означает:Открыт для расширения, закрыт для модификации. Когда программу необходимо расширить, исходный код нельзя изменить для достижения эффекта «горячей замены». Короче говоря, это сделать программу расширяемой, простой в обслуживании и обновлении. Для достижения этого эффекта нам нужно использовать интерфейсы и абстрактные классы, о которых мы упомянем позже в конкретном дизайне.
2. Принцип подстановки Лисков.
Принцип подстановки Лисков — один из основных принципов объектно-ориентированного проектирования. Принцип замещения Лисков гласит, что везде, где может появиться базовый класс, должен появиться подкласс. LSP является краеугольным камнем наследования и повторного использования.Только когда производный класс может заменить базовый класс и функция программной единицы не затрагивается, базовый класс может быть действительно повторно использован, а производный класс также может добавлять новые на основе базового класса поведение. Принцип замещения Лисков является дополнением к принципу открытого-закрытого. Ключевым шагом для реализации принципа открытого-закрытого является абстракция, а отношения наследования между базовым классом и подклассом — это конкретная реализация абстракции, поэтому принцип подстановки Лискова — это спецификация конкретных шагов для реализации абстракции.
3. Принцип обращения зависимости
Этот принцип лежит в основе принципа открытого-закрытого, конкретного содержания: программирование против интерфейсов, полагающееся скорее на абстракцию, чем на конкретность.
4. Принцип разделения интерфейса
Этот принцип означает, что лучше использовать несколько изолированных интерфейсов, чем использовать один интерфейс. У него есть и другое значение: уменьшить связь между классами. Можно видеть, что на самом деле шаблон проектирования представляет собой идею проектирования программного обеспечения, которая начинается с крупномасштабной архитектуры программного обеспечения, которую легко обновлять и поддерживать, делая упор на уменьшение зависимостей и связанности.
5. Закон Деметры, также известный как принцип наименьшего знания (принцип Деметры).
Принцип наименьшего знания означает, что объект должен как можно меньше взаимодействовать с другими объектами, чтобы функциональные модули системы были относительно независимыми.
6. Составной принцип повторного использования
Принцип повторного использования композиции означает: попробуйте использовать композицию/агрегацию вместо наследования.
заводской узор
Одним из наиболее часто используемых шаблонов проектирования является Factory Pattern. Этот тип шаблона проектирования является шаблоном создания, который обеспечивает оптимальный способ создания объектов.
В фабричном шаблоне мы не раскрываем логику создания клиенту при создании объектов и используем общий интерфейс для указания на вновь созданные объекты.
вводить
намерение:Определите интерфейс для создания объекта, и пусть его подклассы решают, какой класс фабрики создавать экземпляры Шаблон фабрики откладывает процесс создания до подклассов.
Основное решение:В основном решить проблему выбора интерфейса.
Когда использовать:Мы четко планируем при создании разных экземпляров в разных условиях.
Как решить:Пусть его подклассы реализуют фабричный интерфейс и возвращают абстрактный продукт.
Ключевой код:Процесс создания выполняется в его подклассах.
Приложения:
- Вам нужен автомобиль, который можно забрать прямо с завода, вне зависимости от того, как был сделан автомобиль и конкретной реализации в машине.
- Hibernate нужно только изменить диалект и драйвер для изменения базы данных.
преимущество:
- Вызывающий объект, который хочет создать объект, должен знать только его имя.
- Высокая масштабируемость, если вы хотите добавить продукт, вам нужно только расширить фабричный класс.
- Конкретная реализация продукта скрыта, и вызывающая сторона заботится только об интерфейсе продукта.
недостаток:Каждый раз, когда добавляется продукт, необходимо добавлять конкретный класс и фабрику реализации объектов, что удваивает количество классов в системе, в определенной степени увеличивает сложность системы, а также увеличивает зависимость конкретных классов в системе. система. Это не хорошая вещь.
используемые сцены:
- Регистратор: Записи могут записываться на локальный жесткий диск, системные события, удаленные серверы и т. д. Пользователь может выбрать, куда записывать журнал.
- Доступ к базе данных, когда пользователь не знает, какой тип базы данных будет использовать конечная система, и когда база данных может измениться.
- Для разработки платформы для подключения к серверу требуются три протокола: «POP3», «IMAP» и «HTTP», которые можно использовать в качестве классов продуктов для совместной реализации интерфейса.
Меры предосторожности:В качестве шаблона создания класса фабричный метод можно использовать везде, где необходимо создать сложные объекты. Следует отметить, что сложные объекты подходят для использования фабричного шаблона, в то время как простые объекты, особенно объекты, которые могут быть созданы только с помощью new, не нуждаются в использовании фабричного шаблона. Если вы используете фабричный шаблон, вам нужно ввести фабричный класс, что увеличит сложность системы.
Абстрактный заводской узор
Абстрактная фабрика (Abstract Factory Pattern) предназначена для создания других фабрик вокруг суперфабрики. Гигафабрика также известна как фабрика других фабрик. Этот тип шаблона проектирования является шаблоном создания, который обеспечивает оптимальный способ создания объектов.
В шаблоне абстрактной фабрики интерфейс — это фабрика, ответственная за создание связанного объекта без явного указания их класса. Каждая сгенерированная фабрика может предоставлять объекты в соответствии с шаблоном фабрики.
вводить
намерение:Предоставляет интерфейс для создания ряда связанных или взаимозависимых объектов без указания их конкретных классов.
Основное решение:В основном решить проблему выбора интерфейса.
Когда использовать:Продукт системы имеет более одного семейства продуктов, и система потребляет продукт только одного семейства.
Как решить:В семействе продуктов определите несколько продуктов.
Ключевой код:Объединяйте несколько продуктов одного типа на одном заводе.
Приложения:После работы для посещения некоторых вечеринок необходимо иметь два и более комплекта одежды, например деловую одежду (комплекты, серия конкретных изделий), модную одежду (комплекты, серия конкретных изделий) и даже для семьи, Может быть деловая женская одежда, деловая мужская одежда, модная женская одежда, модная мужская одежда, а это тоже комплекты, то есть серия конкретных изделий. Предположим ситуацию (в реальности ее не существует, иначе в коммунизм не войти, но полезно проиллюстрировать абстрактную фабричную модель), в вашем доме некий гардероб (конкретная фабрика) может хранить только определенный вид вещей. такая одежда (комплекты, серия конкретных изделий), которую естественно приходится доставать из этого гардероба каждый раз, когда вы берете этот комплект одежды. Чтобы разобраться с идеей ОО, все гардеробы (конкретные фабрики) являются одним из гардеробов (абстрактных фабрик), и каждый комплект одежды включает в себя конкретный верх (конкретный товар), штаны (конкретный товар). ), эти бетонные топы на самом деле топы (абстрактные продукты), а бетонные штаны также являются штанами (еще один абстрактный продукт).
преимущество:Когда несколько объектов в семействе продуктов предназначены для совместной работы, это гарантирует, что клиенты всегда будут использовать только объекты из одного семейства продуктов.
недостаток:Расширить семейство продуктов очень сложно, чтобы добавить определенный продукт в серию, необходимо добавить код в абстрактного творца и добавить код в конкретный.
используемые сцены:
- Смена кожи QQ, весь набор меняется вместе.
- Создание программ для разных операционных систем.
Меры предосторожности:Семейство продуктов трудно расширить, а уровень продукта легко расширить.
одноэлементный шаблон
Шаблон Singleton — один из самых простых шаблонов проектирования в Java. Этот тип шаблона проектирования является шаблоном создания, который обеспечивает оптимальный способ создания объектов.
Этот шаблон включает в себя один класс, который отвечает за создание своих собственных объектов, обеспечивая при этом создание только одного объекта. Этот класс предоставляет способ прямого доступа к своему единственному объекту без создания экземпляра объекта класса.
Уведомление:
- 1. Одноэлементный класс может иметь только один экземпляр.
- 2. Одноэлементный класс должен сам создавать свой собственный уникальный экземпляр.
- 3. Одноэлементный класс должен предоставлять этот экземпляр всем другим объектам.
вводить
намерение:Гарантирует наличие только одного экземпляра класса и предоставляет к нему глобальную точку доступа.
Основное решение:Глобально используемый класс часто создается и уничтожается.
Когда использовать:Когда вы хотите контролировать количество экземпляров и экономить системные ресурсы.
Как решить:Определить, есть ли в системе уже этот синглтон, если есть, вернуть его, если нет — создать.
Ключевой код:Конструкторы частные.
Приложения:
- В классе только один учитель.
- Windows является многопроцессорной и многопоточной.При работе с файлом неизбежно, что несколько процессов или потоков работают с файлом одновременно, поэтому обработка всех файлов должна выполняться через уникальный экземпляр.
- Некоторые диспетчеры устройств часто проектируются как одноэлементный режим, например, компьютер имеет два принтера, и необходимо обработать то, что два принтера не могут печатать один и тот же файл при выводе.
преимущество:
- В памяти находится только один экземпляр, что снижает нагрузку на память, особенно при частом создании и уничтожении экземпляров (например, кэш домашней страницы Школы менеджмента).
- Избегайте многократного использования ресурсов (например, операций записи в файл).
недостаток:Здесь нет интерфейса, нет наследования и конфликтует с принципом единой ответственности Класс должен заботиться только о внутренней логике, а не о том, как реализовать ее снаружи.
используемые сцены:
- Требуется уникальный серийный номер производства.
- Счетчик в WEB не нужно добавлять в базу данных каждый раз, когда она обновляется, а сначала кэшируется с помощью синглтона.
- Созданный объект должен потреблять слишком много ресурсов, таких как подключение ввода-вывода к базе данных и т. д.
**Примечание: **Метод getInstance() должен использовать синхронизированную блокировку синхронизации (Singleton.class), чтобы предотвратить одновременный ввод нескольких потоков и многократное создание экземпляра экземпляра.
режим строителя
Шаблон Builder использует несколько простых объектов для пошагового построения сложного объекта. Этот тип шаблона проектирования является шаблоном создания, который обеспечивает оптимальный способ создания объектов.
Класс Builder создает конечный объект шаг за шагом. Класс Builder не зависит от других объектов.
вводить
намерение:Отделение сложной сборки от ее представления позволяет одному и тому же процессу сборки создавать разные представления.
Основное решение:В основном решается в программных комплексах, иногда сталкиваясь с созданием «сложного объекта», который обычно состоит из подобъектов различных частей с определенным алгоритмом; в связи с изменением требований часто сталкиваются с различными частями этого сложного объекта кардинальные изменения, изменения, но алгоритмы, которые их объединяют, относительно стабильны.
Когда использовать:Некоторые базовые компоненты не меняются, а их сочетания часто меняются.
Как решить:Отделяйте изменение от изменения.
Ключевой код:Builder: создает и предоставляет экземпляры. Director: управляет зависимостями построенных экземпляров.
Приложения:
- В KFC гамбургеры, кока-кола, картофель фри, жареные куриные крылышки и т. д. одинаковы, а сочетание постоянно меняется, в результате получается так называемый «пакет».
- StringBuilder в JAVA.
преимущество:
- Независимый от застройщика, легко расширяемый.
- Легко контролировать риск деталей.
недостаток:
- Продукты должны иметь что-то общее, а область применения ограничена.
- Если внутренние изменения сложны, классов строительства будет много.
используемые сцены:
- Объекты, которые необходимо сгенерировать, имеют сложную внутреннюю структуру.
- Внутренние свойства объектов, которые необходимо сгенерировать, сами по себе взаимозависимы.
Меры предосторожности:Отличие от шаблона factory заключается в том, что шаблон Builder больше связан с порядком, в котором собираются детали.
режим прототипа
Шаблон прототипа используется для создания повторяющихся объектов при сохранении производительности. Этот тип шаблона проектирования является шаблоном создания, который обеспечивает оптимальный способ создания объектов.
Этот шаблон реализует интерфейс-прототип, который используется для создания клона текущего объекта. Этот режим используется, когда стоимость непосредственного создания объекта относительно высока. Например, объект необходимо создать после дорогостоящей операции с базой данных. Мы можем уменьшить количество обращений к базе данных, кэшируя объект, возвращая его клон при следующем запросе и обновляя базу данных при необходимости.
вводить
намерение:Используйте экземпляры прототипов, чтобы указать тип создаваемых объектов, и создавайте новые объекты, копируя эти прототипы.
Основное решение:Создавайте и удаляйте прототипы во время выполнения.
Когда использовать:
- Когда система должна быть создана, составлена и представлена независимо от ее продукта.
- Когда класс для создания экземпляра указывается во время выполнения, например, при динамической загрузке.
- Чтобы избежать создания иерархии классов фабрики параллельно иерархии классов продуктов.
- Когда экземпляр класса может иметь только одну из нескольких различных комбинаций состояний. Может быть удобнее построить соответствующее количество прототипов и клонировать их, чем каждый раз вручную создавать экземпляр класса с соответствующим состоянием.
Как решить:Используйте существующий объект-прототип для быстрого создания того же экземпляра, что и объект-прототип.
Ключевой код:
- Для реализации операции клонирования, наследования Cloneable в JAVA, переопределения clone() и .NET можно использовать метод MemberwiseClone() класса Object для реализации поверхностной копии объекта или глубокой копии посредством сериализации.
- Шаблон прототипа также используется для изоляции отношения связи между пользователем объекта класса и конкретным типом (изменяемым классом), а также требует, чтобы эти «изменяемые классы» имели стабильные интерфейсы.
Приложения:
- Деление клеток.
- Метод клонирования объекта() в JAVA.
преимущество:
- Улучшения производительности.
- Избегайте ограничений конструктора.
недостаток:
- Оснащение метода клонирования требует общего рассмотрения функциональности класса, что несложно для совершенно нового класса, но не обязательно легко для существующего класса, особенно когда класс ссылается на косвенные объекты, которые не поддерживают сериализацию, или ссылку содержит циклы, когда структура.
- Должен реализовать интерфейс Cloneable.
используемые сцены:
- Сценарии оптимизации ресурсов.
- Инициализация класса требует переваривания большого количества ресурсов, включая данные, аппаратные ресурсы и т. д.
- Сценарии с требованиями к производительности и безопасности.
- Шаблон прототипа можно использовать, если создание объекта с помощью new требует очень утомительной подготовки данных или прав доступа.
- Сценарии с несколькими модификаторами для одного объекта.
- Когда объекту необходимо предоставить доступ к другим объектам, и каждому вызывающему объекту может потребоваться изменить его значение, вы можете рассмотреть возможность использования шаблона прототипа для копирования нескольких объектов для использования вызывающим объектом.
- В реальных проектах шаблон прототипа редко появляется сам по себе и обычно появляется вместе с шаблоном фабричного метода.Объект создается методом клонирования, а затем предоставляется вызывающей стороне фабричным методом. Шаблон прототипа был интегрирован в Java, и вы можете использовать его где угодно.
Меры предосторожности:Вместо создания нового объекта путем создания экземпляра класса шаблон прототипа создает новый объект путем копирования существующего объекта. Поверхностная копия реализует Cloneable, перезапись, глубокая копия предназначена для чтения двоичного потока путем реализации Serializable.
Режим пула объектов
Пулы объектов (также известные как пулы ресурсов) используются для управления кэшем объектов. Пул объектов — это набор объектов, которые были инициализированы и могут использоваться напрямую.Когда пользователи используют объекты, они могут получать объекты из пула объектов, работать с ними и возвращать их в пул объектов вместо того, чтобы уничтожать их, когда они используются. не требуется.
Если стоимость инициализации и создания экземпляра объекта высока, и его нужно создавать часто, но количество каждого экземпляра невелико, использование пула объектов может значительно повысить производительность. Общие технологии, использующие шаблон пула объектов, включают пулы потоков, пулы соединений с базами данных, пулы очередей задач и пулы объектов ресурсов изображений.
Конечно, если объект, который нужно создать, небольшой и не требует больших накладных расходов, нет необходимости использовать режим пула объектов, который не улучшит производительность, но будет тратить место в памяти и даже снизит производительность.
образец кода
Pool.php
<?php
namespace DesignPatterns\Creational\Pool;
class Pool
{
private $instances = array();
private $class;
public function __construct($class)
{
$this->class = $class;
}
public function get()
{
if (count($this->instances) > 0) {
return array_pop($this->instances);
}
return new $this->class();
}
public function dispose($instance)
{
$this->instances[] = $instance;
}
}
Processor.php
<?php
namespace DesignPatterns\Creational\Pool;
class Processor
{
private $pool;
private $processing = 0;
private $maxProcesses = 3;
private $waitingQueue = [];
public function __construct(Pool $pool)
{
$this->pool = $pool;
}
public function process($image)
{
if ($this->processing++ < $this->maxProcesses) {
$this->createWorker($image);
} else {
$this->pushToWaitingQueue($image);
}
}
private function createWorker($image)
{
$worker = $this->pool->get();
$worker->run($image, array($this, 'processDone'));
}
public function processDone($worker)
{
$this->processing--;
$this->pool->dispose($worker);
if (count($this->waitingQueue) > 0) {
$this->createWorker($this->popFromWaitingQueue());
}
}
private function pushToWaitingQueue($image)
{
$this->waitingQueue[] = $image;
}
private function popFromWaitingQueue()
{
return array_pop($this->waitingQueue);
}
}
Worker.php
<?php
namespace DesignPatterns\Creational\Pool;
class Worker
{
public function __construct()
{
// let's say that constuctor does really expensive work...
// for example creates "thread"
}
public function run($image, array $callback)
{
// do something with $image...
// and when it's done, execute callback
call_user_func($callback, $this);
}
}
многоэкземплярный режим
Шаблон с несколькими экземплярами аналогичен шаблону с одним элементом, но может возвращать несколько экземпляров. Например, у нас есть несколько подключений к базе данных, MySQL, SQLite, Postgres или у нас есть несколько регистраторов, которые используются для записи отладочной информации и информации об ошибках, которые можно реализовать с использованием режима нескольких экземпляров.
образец кода
Multiton.php
<?php
namespace DesignPatterns\Creational\Multiton;
/**
* Multiton类
*/
class Multiton
{
/**
*
* 第一个实例
*/
const INSTANCE_1 = '1';
/**
*
* 第二个实例
*/
const INSTANCE_2 = '2';
/**
* 实例数组
*
* @var array
*/
private static $instances = array();
/**
* 构造函数是私有的,不能从外部进行实例化
*
*/
private function __construct()
{
}
/**
* 通过指定名称返回实例(使用到该实例的时候才会实例化)
*
* @param string $instanceName
*
* @return Multiton
*/
public static function getInstance($instanceName)
{
if (!array_key_exists($instanceName, self::$instances)) {
self::$instances[$instanceName] = new self();
}
return self::$instances[$instanceName];
}
/**
* 防止实例从外部被克隆
*
* @return void
*/
private function __clone()
{
}
/**
* 防止实例从外部反序列化
*
* @return void
*/
private function __wakeup()
{
}
}
статический заводской шаблон
Подобно простой фабрике, этот шаблон используется для создания набора связанных или зависимых объектов, за исключением того, что шаблон статической фабрики использует один статический метод для создания всех типов объектов, обычно фабрики или сборки.
образец кода
StaticFactory.php
<?php
namespace DesignPatterns\Creational\StaticFactory;
class StaticFactory
{
/**
* 通过传入参数创建相应对象实例
*
* @param string $type
*
* @static
*
* @throws \InvalidArgumentException
* @return FormatterInterface
*/
public static function factory($type)
{
$className = __NAMESPACE__ . '\Format' . ucfirst($type);
if (!class_exists($className)) {
throw new \InvalidArgumentException('Missing format class.');
}
return new $className();
}
}
FormatterInterface.php
<?php
namespace DesignPatterns\Creational\StaticFactory;
/**
* FormatterInterface接口
*/
interface FormatterInterface
{
}
FormatString.php
<?php
namespace DesignPatterns\Creational\StaticFactory;
/**
* FormatNumber类
*/
class FormatNumber implements FormatterInterface
{
}
режим адаптера
Шаблон адаптера действует как мост между двумя несовместимыми интерфейсами. Этот тип шаблона проектирования представляет собой структурный шаблон, который сочетает в себе функциональность двух отдельных интерфейсов.
В этом шаблоне используется один класс, который отвечает за добавление отдельных или несовместимых функций интерфейса. В реальном примере картридер выступает в роли адаптера между картой памяти и ноутбуком. Вы вставляете карту памяти в кард-ридер, а затем вставляете кард-ридер в ноутбук, чтобы карту памяти можно было прочитать через ноутбук.
вводить
намерение:Преобразуйте интерфейс класса в другой интерфейс, который хочет клиент. Шаблон адаптера позволяет классам работать вместе, которые в противном случае не работали бы вместе из-за несовместимых интерфейсов.
Основное решение:Основное решение заключается в том, что в программных системах некоторые «существующие объекты» часто помещаются в новую среду, и интерфейс, требуемый новой средой, не может быть обеспечен существующими объектами.
Когда использовать:
- Системе необходимо использовать существующий класс, а интерфейс этого класса не соответствует потребностям системы.
- Если вы хотите создать повторно используемый класс для работы с некоторыми классами, которые не очень связаны друг с другом, включая некоторые классы, которые могут быть введены в будущем, эти исходные классы не обязательно имеют согласованный интерфейс.
- Через преобразование интерфейса один класс вставляется в другое семейство классов. (Например, тигры и птицы, теперь есть летающий тигр. Не увеличивая потребности сущностей, добавлен адаптер, содержащий объект тигра и реализующий интерфейс полета.)
Как решить:Наследовать или зависеть (рекомендуется).
Ключевой код:Адаптеры наследуют или полагаются на существующие объекты для реализации желаемого целевого интерфейса.
Приложения:
- Американские электроприборы 110В, Китай 220В, должен быть переходник для преобразования 110В в 220В.
- JAVA JDK 1.1 предоставляет интерфейс Enumeration, а интерфейс Iterator предоставляется в 1.2.Если вы хотите использовать JDK 1.2, вам необходимо преобразовать интерфейс Enumeration предыдущей системы в интерфейс Iterator, тогда вам нужен режим адаптера.
- Запускайте программы WINDOWS в LINUX. 4. jdbc в JAVA.
преимущество:
- Любые два несвязанных класса можно запускать вместе.
- Улучшено повторное использование классов.
- Добавлена прозрачность класса.
- Хорошая гибкость.
недостаток:
- Чрезмерное использование адаптеров сделает систему очень грязной и трудной для понимания в целом. Например, очевидно, что вызывается интерфейс А, но на самом деле он адаптирован к реализации интерфейса Б. Если в системе слишком много таких ситуаций, это равносильно катастрофе. Поэтому, если в этом нет необходимости, можно напрямую рефакторить систему без использования адаптера.
- Поскольку JAVA наследует не более одного класса, она может адаптироваться не более чем к одному классу адаптера, а целевой класс должен быть абстрактным классом.
используемые сцены:При мотивированном изменении интерфейса функционирующей системы следует рассмотреть возможность использования шаблона адаптера.
Меры предосторожности:Переходники добавляются не во время детального проектирования, а для решения проблем с предметами в эксплуатации.
режим моста
Мост используется для отделения абстракции от реализации, чтобы они могли меняться независимо друг от друга. Этот тип шаблона проектирования относится к структурному шаблону, который реализует разделение абстракции и реализации, предоставляя связующую структуру между ними.
Этот шаблон включает в себя интерфейс, который действует как мост, делая функциональность класса сущностей независимыми от класса реализации интерфейса. Эти два типа классов могут быть изменены структурно, не затрагивая друг друга.
вводить
намерение:Отделите абстрактную часть от части реализации, чтобы их можно было изменять независимо друг от друга.
Основное решение:Во множестве ситуаций, которые могут измениться, использование наследования вызовет проблемы взрыва класса и будет негибким для расширения.
Когда использовать:Внедряющие системы могут иметь несколько перспективных классификаций, каждая из которых может различаться.
Как решить:Разделите эту многоракурсную классификацию, позвольте им изменяться независимо и уменьшите связь между ними.
Ключевой код:Абстрактные классы зависят от классов реализации.
Приложения:
- Чжу Бацзе переродился из маршала Тяньпэна в свинью.Механизм реинкарнации делит мир на два уровня: душа и тело.Первый эквивалентен абстракции, а второй эквивалентен реализации. Посредством делегирования функций существа вызывают функции физических объектов, так что существа могут выбирать динамически.
- Выключатель на стене, который вы видите, является абстрактным, независимо от того, как он реализован.
преимущество:
- Разделение абстракции и реализации.
- Отличная масштабируемость.
- Детали реализации прозрачны для клиента.
недостаток:Введение режима моста усложнит понимание и проектирование системы.Поскольку отношения агрегации устанавливаются на уровне абстракции, разработчики должны проектировать и программировать для абстракции.
используемые сцены:
- Если системе необходимо добавить больше гибкости между абстрактной ролью и конкретной ролью компонента, избегайте установления статического отношения наследования между двумя уровнями и используйте шаблон моста, чтобы заставить их установить отношение ассоциации на абстрактном уровне.
- Режим моста особенно подходит для тех систем, которые не хотят использовать наследование или где количество системных классов резко увеличивается из-за многоуровневого наследования.
- Класс имеет два независимо изменяющихся измерения, и оба измерения необходимо расширить.
Меры предосторожности:Для двух измерений, которые изменяются независимо, идеально подходит режим моста.
режим фильтра
Шаблон фильтра или шаблон критериев — это шаблон проектирования, который позволяет разработчикам фильтровать набор объектов с использованием различных критериев и связывать их несвязанным образом с помощью логических операций. Этот тип шаблона проектирования представляет собой структурный шаблон, который объединяет несколько критериев для получения одного критерия.
Комбинированный режим
Составной шаблон, также известный как шаблон «Часть целого», используется для обработки группы похожих объектов как единого объекта. Шаблон композиции компонует объекты в соответствии с древовидной структурой, которая используется для представления частей и целых иерархий. Этот тип шаблона проектирования представляет собой структурный шаблон, который создает древовидную структуру групп объектов.
Этот шаблон создает класс, содержащий собственную группу объектов. Этот класс предоставляет способ изменения одной и той же группы объектов.
вводить
намерение:Группирует объекты в древовидные структуры для представления иерархий часть-целое. Составной режим позволяет пользователям последовательно использовать отдельные объекты и составные объекты.
Основное решение:Это размывает понятия простых элементов и сложных элементов в нашей проблеме древовидной структуры, и клиентская программа может обрабатывать сложные элементы как простые элементы, тем самым отделяя клиентскую программу от внутренней структуры сложных элементов.
Когда использовать:
- Вы хотите представить части объекта - общую иерархию (древовидную структуру).
- Вы хотите, чтобы пользователи игнорировали разницу между составными объектами и отдельными объектами, и пользователи будут использовать все объекты в составной структуре единообразно.
Как решить:Ветки и листья реализуют единый интерфейс, который объединен внутри ветки.
Ключевой код:Интерфейс объединен внутри ветки и содержит внутреннее свойство List, в котором содержится Component.
Приложения:
- Арифметическое выражение состоит из операнда, оператора и другого операнда, где другой оператор также может быть операндом, оператора и другого операнда.
- В JAVA AWT и SWING Button и Checkbox являются листьями, а Container — веткой.
преимущество:
- Вызовы модулей высокого уровня просты.
- Узлы добавляются свободно.
недостаток:При использовании шаблона композиции все объявления его листьев и ветвей реализуют классы, а не интерфейсы, что нарушает принцип инверсии зависимостей.
используемые сцены:Раздел Общая сцена, такая как древовидное меню, управление файлами, папками.
Меры предосторожности:Определяется как конкретный класс.
Шаблон декоратора
Шаблон декоратора позволяет добавлять новые функции к существующему объекту без изменения его структуры. Этот тип шаблона проектирования представляет собой структурный шаблон, который действует как оболочка существующего класса.
Этот шаблон создает оформленный класс, который является оболочкой исходного класса и предоставляет дополнительные функции, сохраняя при этом целостность сигнатур методов класса.
вводить
намерение:Динамически добавляйте дополнительные обязанности к объекту. Шаблон декоратора более гибок, чем создание подклассов, с точки зрения добавления функциональности.
Основное решение:Как правило, чтобы расширить класс, мы часто используем наследование для его реализации, поскольку наследование вводит в класс статические функции, а с увеличением расширенных функций подклассы будут очень раздутыми.
Когда использовать:Расширьте класс, не добавляя много подклассов.
Как решить:Разделите конкретные функциональные обязанности и наследуйте шаблон декоратора.
Ключевой код:
- Класс Component действует как абстракция и не должен реализовываться конкретно.
- Декорированный класс ссылается на класс Component и наследует его, а конкретный класс расширения переопределяет метод родительского класса.
Приложения:
- Король обезьян имеет 72 изменения.Когда он становится «храмом», он все еще остается обезьяной в корне, но у него снова есть функция храма.
- Картину можно повесить на стену независимо от того, в раме она или нет, но обычно она в раме, и на самом деле рама вешается на стену. Перед тем, как повесить на стену, картину можно накрыть стеклом и оформить в рамку, тогда картина, стекло и рамка картины образуют единый объект.
преимущество:Класс декоратора и декорированный класс могут развиваться независимо друг от друга и не будут связаны друг с другом Шаблон декоратора является альтернативой наследованию Шаблон декоратора может динамически расширять функцию класса реализации.
недостаток:Многослойное декорирование более сложное.
используемые сцены:
- Расширить функциональность класса.
- Динамически добавлять функции и динамически отменять.
Меры предосторожности:Альтернатива наследованию.
Внешний вид Режим
Фасадный паттерн скрывает сложность системы и предоставляет клиенту интерфейс, через который клиент может получить доступ к системе. Этот тип шаблона проектирования является структурным шаблоном, который добавляет интерфейс к существующей системе, чтобы скрыть сложность системы.
В этом шаблоне используется один класс, предоставляющий упрощенные методы для клиентских запросов и делегированные вызовы методов существующих системных классов.
вводить
намерение:Предоставляя согласованный интерфейс для набора интерфейсов в подсистеме, шаблон Facade определяет высокоуровневый интерфейс, упрощающий использование подсистемы.
Основное решение:Снижает сложность доступа к внутренним подсистемам сложных систем и упрощает взаимодействие клиентов с ними.
Когда использовать:
- Клиенту не нужно знать сложные соединения внутри системы, всю систему нужно только предоставить «рецепшн».
- Определите точку входа в систему.
Как решить:Клиент не привязан к системе, класс фасада привязан к системе.
Ключевой код:Добавьте еще один слой между клиентом и сложной системой, этот слой будет обрабатывать порядок вызовов, зависимости и т. д.
Приложения:
- Посещение больницы для посещения врача может включать в себя регистрацию, амбулаторные услуги, ценообразование и сбор лекарств, что заставляет пациента или его семью чувствовать себя очень сложно.
- Трехуровневая модель разработки JAVA.
преимущество:
- Уменьшить взаимозависимость системы.
- Повышение гибкости.
- Улучшенная безопасность.
недостаток:Он не соответствует принципу открытого-закрытого, если что-то изменить очень хлопотно, то наследование и переписывание не подходят.
используемые сцены:
- Модули, обеспечивающие внешний доступ к сложным модулям или подсистемам.
- Подсистемы относительно независимы.
- Предотвращение рисков, связанных с персоналом низшего звена.
Меры предосторожности:В иерархической структуре вы можете использовать режим внешнего вида для определения записи каждого уровня в системе.
наилегчайший образец
Шаблон Flyweight в основном используется для уменьшения количества создаваемых объектов, чтобы уменьшить использование памяти и повысить производительность. Этот тип шаблона проектирования представляет собой структурный шаблон, который позволяет уменьшить количество объектов и, таким образом, улучшить структуру объектов, требуемую приложением.
Шаблон Flyweight пытается повторно использовать существующий объект того же типа, и если соответствующий объект не найден, создается новый объект. Мы продемонстрируем этот шаблон, создав 5 объектов для рисования 20 кругов в разных положениях. Поскольку доступно только 5 цветов, свойство color используется для проверки существующих цветов.Circleобъект.
вводить
намерение:Используйте методы совместного использования для эффективной поддержки большого количества мелких объектов.
Основное решение:Когда имеется большое количество объектов, это может привести к переполнению памяти. Мы абстрагируем общие части. Если есть один и тот же бизнес-запрос, мы напрямую возвращаем существующие объекты в память, чтобы избежать повторного создания.
Когда использовать:
- В системе большое количество объектов.
- Эти объекты потребляют много памяти.
- Большую часть состояния этих объектов можно экстернализовать.
- Эти объекты можно разделить на множество групп в соответствии с их внутренним состоянием, и когда внешние объекты удаляются из объектов, каждая группа объектов может быть заменена объектом.
- Система не полагается на идентичность этих объектов, которые неразличимы.
Как решить:Судя по уникальному идентификационному коду, если он есть в памяти, возвращается объект, идентифицированный уникальным идентификационным кодом.
Ключевой код:Сохраните эти объекты с помощью HashMap.
Приложения:
- Строка в JAVA, если есть, верните ее, если нет, создайте строку и сохраните ее в пуле строковых буферов. 2. Пул данных базы данных.
преимущество:Создание объектов значительно сокращается, память системы уменьшается, а эффективность повышается.
недостаток:Сложность системы возрастает, и внешнее состояние и внутреннее состояние необходимо разделять, а внешнее состояние имеет внутреннюю природу и не должно меняться с изменением внутреннего состояния, иначе система будет хаотичной.
используемые сцены:
- В системе имеется большое количество подобных объектов.
- Сценарии, требующие пула буферов.
Меры предосторожности:
- Будьте осторожны, чтобы отделить внешнее состояние от внутреннего состояния, иначе это может привести к проблемам безопасности потоков.
- Эти классы должны иметь фабричный объект для управления.
прокси-режим
В шаблоне прокси один класс представляет функциональность другого класса. Этот тип шаблона проектирования является структурным шаблоном.
В шаблоне прокси мы создаем объекты с существующими объектами, чтобы обеспечить функциональный интерфейс с внешним миром.
вводить
намерение:Предоставляет прокси для других объектов для управления доступом к этому объекту.
Основное решение:Проблемы при доступе к объектам напрямую, например: объект, к которому нужно получить доступ, находится на удаленной машине. В объектно-ориентированных системах по некоторым причинам (например, создание объектов стоит дорого, некоторые операции требуют контроля безопасности или доступа вне процесса) прямой доступ доставит много проблем пользователям или системным структурам. добавить слой доступа к этому объекту при доступе к этому объекту.
Когда использовать:Хотите сделать некоторый контроль при доступе к классу.
Как решить:Добавьте средний слой.
Ключевой код:Реализация и проксирование композиции класса.
Приложения:
- Ярлыки в Windows.
- Когда Чжу Бацзе пошел к Гао Цуйланю, оказалось, что это был Сунь Укун. Это можно понять следующим образом: внешний вид Гао Цуйланя абстрагирован. И Гао Цуйлань, и Сунь Укун реализовали этот интерфейс. Когда Чжу Бацзе посетил Гао Цуйлан, он мог Не вижу, что это был Сунь Укун, поэтому было сказано, что Сунь Укун был агентом Гао Цуйланя.
- Вам не обязательно покупать билеты на поезд на вокзале, вы также можете пойти в пункт продажи.
- Чек или банковский депозит является прокси для средств на счете. Чеки используются вместо наличных денег в рыночных сделках и обеспечивают контроль над средствами на счете эмитента.
- весна аоп.
преимущество:
- Обязанности понятны.
- Высокая масштабируемость.
- Разумный.
недостаток:
- Некоторые типы прокси-шаблонов могут вызывать более медленную обработку запросов из-за добавления прокси-объектов между клиентом и реальной темой.
- Реализация шаблонов прокси требует дополнительной работы, а некоторые шаблоны прокси очень сложны в реализации.
используемые сцены:Разделенные по обязанностям, обычно существуют следующие сценарии использования:
- Удаленный прокси.
- виртуальный агент.
- Прокси с копированием при записи.
- Агент защиты (защиты или доступа).
- Кэш прокси.
- Прокси-сервер брандмауэра.
- Агент синхронизации.
- Умный справочный агент.
Меры предосторожности:
- Отличие от режима адаптера: режим адаптера в основном изменяет интерфейс рассматриваемого объекта, тогда как режим прокси не может изменить интерфейс класса прокси.
- Отличие от шаблона декоратора: шаблон декоратора предназначен для расширения функциональности, а шаблон прокси — для управления.
Режим отображения данных
Прежде чем понять режим отображения данных, сначала разберитесь с отображением данных, которое представляет собой уровень доступа к данным, который выполняет двунаправленную передачу данных между уровнем постоянного хранения данных (обычно реляционной базой данных) и уровнем представления данных в памяти.
Цель режима отображения данных состоит в том, чтобы сделать уровень постоянного хранения данных, уровень представления данных, находящийся в памяти, и само отображение данных независимыми и независимыми друг от друга. Этот уровень доступа к данным состоит из одного или нескольких преобразователей (или объектов доступа к данным), которые реализуют передачу данных. Общий уровень доступа к данным может обрабатывать различные типы объектов, а специализированный — один или несколько.
Суть шаблона сопоставления данных заключается в том, что его модель данных следует принципу единой ответственности, который также отличается от шаблона Active Record. Наиболее типичным примером шаблона отображения данных является модель базы данных ORM (Object Relational Mapper).
Чтобы быть точным, этот шаблон является архитектурным шаблоном.
Шаблон внедрения зависимостей
Внедрение зависимостей — это реализация инверсии управления.
Давайте сначала посмотрим, что такое инверсия управления.
Когда вызывающему объекту требуется помощь вызываемого объекта, в традиционном процессе программирования вызывающий объект обычно создает экземпляр вызываемого объекта, но здесь работа по созданию вызываемого объекта больше не выполняется вызывающим объектом, а заключается в перемещении объекта вызываемого объекта. создание за пределами вызывающего, тем самым инвертируя создание вызываемого объекта, устраняя контроль вызывающего объекта над созданием вызываемого объекта, поэтому это называется инверсией управления.
Чтобы добиться инверсии управления, обычное решение состоит в том, чтобы оставить работу по созданию экземпляра вызываемого объекта контейнеру IoC, а затем внедрить вызываемый объект в вызывающий объект (путем внедрения конструктора/метода), таким образом, мы достигаем отделения вызывающего объекта от callee называется внедрением зависимостей.
Внедрение зависимостей — это не цель, это набор инструментов и средств, конечная цель — помочь нам разработать слабосвязанный, поддерживаемый, тестируемый код и программы. Подход к этому принципу известен как интерфейсно-ориентированное или абстрактно-ориентированное программирование.
узор фасада
Facade, также известный как Facade, используется для предоставления согласованного интерфейса для набора интерфейсов в подсистеме. Шаблон фасада определяет высокоуровневый интерфейс, который упрощает использование подсистемы: после введения роли фасада пользователю нужно только напрямую взаимодействовать с ролью фасада, и реализуются сложные отношения между пользователем и подсистемой. ролью фасада, что снижает степень связанности системы.
образец кода
Facade.php
<?php
namespace DesignPatterns\Structural\Facade;
/**
* 门面类
*/
class Facade
{
/**
* @var OsInterface
*/
protected $os;
/**
* @var BiosInterface
*/
protected $bios;
/**
* This is the perfect time to use a dependency injection container
* to create an instance of this class
*
* @param BiosInterface $bios
* @param OsInterface $os
*/
public function __construct(BiosInterface $bios, OsInterface $os)
{
$this->bios = $bios;
$this->os = $os;
}
/**
* turn on the system
*/
public function turnOn()
{
$this->bios->execute();
$this->bios->waitForKeyPress();
$this->bios->launch($this->os);
}
/**
* turn off the system
*/
public function turnOff()
{
$this->os->halt();
$this->bios->powerDown();
}
}
OsInterface.php
<?php
namespace DesignPatterns\Structural\Facade;
/**
* OsInterface接口
*/
interface OsInterface
{
/**
* halt the OS
*/
public function halt();
}
BiosInterface.php
<?php
namespace DesignPatterns\Structural\Facade;
/**
* BiosInterface接口
*/
interface BiosInterface
{
/**
* execute the BIOS
*/
public function execute();
/**
* wait for halt
*/
public function waitForKeyPress();
/**
* launches the OS
*
* @param OsInterface $os
*/
public function launch(OsInterface $os);
/**
* power down BIOS
*/
public function powerDown();
}
Режим потокового интерфейса
В программной инженерии потоковый интерфейс (Fluent Interface) относится к методу реализации объектно-ориентированного API, который может улучшить читаемость кода. Его цель — писать код, читаемый так же, как естественный язык. Существует также популярное название для способ написания кода - цепочка методов.
Шаблон потокового интерфейса в Laravel широко используется, например, построитель запросов, почта и т. д.
образец кода
Sql.php
<?php
namespace DesignPatterns\Structural\FluentInterface;
/**
* SQL 类
*/
class Sql
{
/**
* @var array
*/
protected $fields = array();
/**
* @var array
*/
protected $from = array();
/**
* @var array
*/
protected $where = array();
/**
* 添加 select 字段
*
* @param array $fields
*
* @return SQL
*/
public function select(array $fields = array())
{
$this->fields = $fields;
return $this;
}
/**
* 添加 FROM 子句
*
* @param string $table
* @param string $alias
*
* @return SQL
*/
public function from($table, $alias)
{
$this->from[] = $table . ' AS ' . $alias;
return $this;
}
/**
* 添加 WHERE 条件
*
* @param string $condition
*
* @return SQL
*/
public function where($condition)
{
$this->where[] = $condition;
return $this;
}
/**
* 生成查询语句
*
* @return string
*/
public function getQuery()
{
return 'SELECT ' . implode(',', $this->fields)
. ' FROM ' . implode(',', $this->from)
. ' WHERE ' . implode(' AND ', $this->where);
}
}
режим регистрации
Режим регистрации (Registry) также называют режимом дерева регистрации, режимом реестра. Шаблон реестра создает центральное хранилище для объектов, которые часто используются в приложении — обычно через абстрактный класс, содержащий только статические методы (или через шаблон singleton).
образец кода
Registry.php
<?php
namespace DesignPatterns\Structural\Registry;
/**
* class Registry
*/
abstract class Registry
{
const LOGGER = 'logger';
/**
* @var array
*/
protected static $storedValues = array();
/**
* sets a value
*
* @param string $key
* @param mixed $value
*
* @static
* @return void
*/
public static function set($key, $value)
{
self::$storedValues[$key] = $value;
}
/**
* gets a value from the registry
*
* @param string $key
*
* @static
* @return mixed
*/
public static function get($key)
{
return self::$storedValues[$key];
}
// typically there would be methods to check if a key has already been registered and so on ...
}
Модель цепочки ответственности
Как следует из названия, шаблон цепочки ответственности создает цепочку объектов-получателей для запроса. Этот шаблон указывает тип запроса, разделяя отправителя и получателя запроса. Этот тип шаблона проектирования является поведенческим шаблоном.
В этом шаблоне обычно каждый получатель содержит ссылку на другой получатель. Если объект не может обработать запрос, он передаст тот же запрос следующему получателю и так далее.
вводить
намерение:Избегайте связывания отправителя и получателя запроса, сделайте возможным получение запроса несколькими объектами, соедините эти объекты в цепочку и передайте запрос по цепочке, пока объект не обработает его.
Основное решение:Обработчик в цепочке ответственности отвечает за обработку запроса. Клиенту нужно только отправить запрос в цепочку ответственности, и ему не нужно заботиться о деталях обработки запроса и доставке запроса, поэтому цепочка ответственности разделяет отправителя запроса и обработчика запроса.
Когда использовать:Существует множество способов фильтрации при обработке сообщений.
Как решить:Все перехваченные классы реализуют унифицированный интерфейс.
Ключевой код:Обработчик агрегирует себя и судит, подходит ли он в HandlerRequest.Если условие не выполняется, оно будет передано вниз и установлено перед передачей кому.
Приложения:
- «Барабанный и переливающийся цветок» в «Сне о красных особняках».
- Всплывание событий в JS.
- Обработка кодирования Apache Tomcat в JAVA WEB, перехватчик Struts2 и фильтр сервлета jsp.
преимущество:
- Уменьшить сцепление. Он разделяет отправителя и получателя запросов.
- Объекты упрощены. Делает объект не нуждающимся в знании структуры цепочки.
- Повышает гибкость при назначении обязанностей объектам. Позволяет динамически добавлять или удалять обязанности, меняя участников в цепочке или переупорядочивая их.
- Удобно добавлять новые классы обработки запросов.
недостаток:
- Нет никакой гарантии, что запрос будет принят.
- В определенной степени это повлияет на производительность системы, а отлаживать код неудобно, что может привести к циклическим вызовам.
- Наблюдать за характеристиками времени выполнения может быть непросто, что затрудняет отладку.
используемые сцены:
- Существуют несколько объектов, которые могут обрабатывать тот же запрос, и какие объекты обрабатывают запрос, автоматически определяется выполнением выполнения.
- Отправляет запрос одному из нескольких объектов без явного указания получателя.
- Набор объектов может быть динамически определен для обработки запросов.
Меры предосторожности:В JAVA WEB есть много приложений.
командный режим
Шаблон команды (Command Pattern) — это шаблон проектирования, управляемый данными, который является поведенческим шаблоном. Запрос оборачивается в объект в виде команды и передается вызывающему объекту. Вызывающий объект ищет подходящий объект, который может обработать команду, и передает команду соответствующему объекту, который ее выполняет.
вводить
намерение:Инкапсулирует запрос в виде объекта, позволяя вам параметризовать клиентов с разными запросами.
Основное решение:В программной системе инициатор запроса поведения и реализатор поведения обычно тесно связаны, но в некоторых случаях, например, когда поведение необходимо записать, отменить или повторить, транзакции и т. д., такая тесная связь не может противостоять изменениям. Сдвоенная конструкция не подходит.
Когда использовать:В некоторых случаях, таких как «запись, отмена/возврат, транзакция» для поведения, такая тесная связь, которая не может сопротивляться изменениям, неуместна. Как в этом случае отделить «заявителя поведения» от «реализатора поведения»? Абстрагирование набора поведений как объектов обеспечивает слабую связь между ними.
Как решить:Вызывающий вызывает получателя для выполнения команды в следующем порядке: вызывающий → получатель → команда.
Ключевой код:Определите три роли:
- получил реальный объект выполнения команды
- Command
- Вызывающий использует запись объекта команды
Приложения:В struts 1 есть только один контроллер ядра действия ActionServlet, который эквивалентен Invoker, а класс уровня модели будет иметь разные классы модели с разными приложениями, что эквивалентно конкретной команде.
преимущество:
- Уменьшенная связь системы.
- Новые команды могут быть легко добавлены в систему.
недостаток:Использование командного режима может привести к тому, что в некоторых системах будет слишком много конкретных классов команд.
используемые сцены:Командный режим можно использовать везде, где он считается командой, например:
- Каждая кнопка в графическом интерфейсе — это команда.
- Имитация CMD.
Меры предосторожности:Система должна поддерживать операцию отмены (Undo) и операцию повтора (Redo) команды, и вы также можете рассмотреть возможность использования командного режима, см. расширение командного режима.
Режим переводчика
Шаблон интерпретатора (Interpreter Pattern) предоставляет способ оценить грамматику или выражения языка, это поведенческий шаблон. Этот шаблон реализует интерфейс выражения, который интерпретирует определенный контекст. Этот режим используется в синтаксическом анализе SQL, механизмах обработки символов и т. д.
вводить
намерение:Для данного языка определите его грамматическое представление и определите интерпретатор, который использует эту идентичность для интерпретации предложений на языке.
Основное решение:Создайте интерпретатор, который интерпретирует предложения для некоторой фиксированной грамматики.
Когда использовать:Если конкретный тип проблемы возникает достаточно часто, возможно, стоит выразить экземпляры проблемы в виде предложений на простом языке. Это позволяет построить интерпретатор, который решает проблему, интерпретируя эти предложения.
Как решить:Постройте синтаксическое дерево и определите терминальные и нетерминальные символы.
Ключевой код:Создайте класс среды, который содержит некоторую глобальную информацию вне интерпретатора, обычно HashMap.
Приложения:Компилятор, вычисление арифметических выражений.
преимущество:
- Лучшая масштабируемость и гибкость.
- Добавлены новые способы интерпретации выражений.
- Простые грамматики легко реализовать.
недостаток:
- Есть несколько доступных сценариев.
- Сложно поддерживать сложные грамматики.
- Режим интерпретатора может вызвать раздувание класса.
- В режиме интерпретатора используется метод рекурсивного вызова.
используемые сцены:
- Предложение на языке, которое необходимо интерпретировать и выполнить, можно представить в виде абстрактного синтаксического дерева.
- Некоторые повторяющиеся проблемы можно выразить простым языком.
- Сценарий, в котором необходимо объяснить простой синтаксис.
Меры предосторожности:Доступных сценариев немного. Если вы столкнетесь с этим в JAVA, вы можете вместо этого использовать выражение 4J.
шаблон итератора
Шаблон Iterator очень часто используется в средах программирования Java и .Net. Этот шаблон используется для последовательного доступа к элементам объекта коллекции без необходимости знать базовое представление объекта коллекции.
Шаблон итератора — это поведенческий шаблон.
вводить
намерение:Предоставляет способ последовательного доступа к элементам агрегатного объекта без раскрытия внутреннего представления объекта.
Основное решение:Различные способы обхода всего объекта интеграции.
Когда использовать:Выполняет итерации по агрегатному объекту.
Как решить:Возложите ответственность за перемещение между элементами на итераторы, а не на совокупные объекты.
Ключевой код:Определяем интерфейс: hasNext, next.
Приложения:итераторы в JAVA.
преимущество:
- Он поддерживает обход агрегатного объекта различными способами.
- Итераторы упрощают классы агрегации.
- На одном и том же агрегате может быть несколько обходов.
- В режиме итератора очень удобно добавлять новые агрегатные классы и классы итераторов, не изменяя исходный код.
недостаток:Поскольку режим итератора разделяет обязанности по хранению данных и обходу данных, добавление нового класса агрегации требует соответственно добавления нового класса итератора, а количество классов увеличивается парами, что в определенной степени увеличивает сложность системы.
используемые сцены:
- Доступ к содержимому агрегатного объекта без раскрытия его внутреннего представления.
- Вам необходимо предоставить несколько способов обхода агрегированных объектов.
- Предоставляет унифицированный интерфейс для обхода различных агрегатных структур.
Меры предосторожности:Шаблон итератора состоит в том, чтобы разделить поведение обхода объектов коллекции и абстрагировать класс итератора, чтобы он был ответственным, чтобы внутренняя структура коллекции не была раскрыта, а данные внутри коллекции могли быть прозрачно доступны внешнему коду.
модель посредника
Шаблон посредника используется для уменьшения сложности связи между несколькими объектами и классами. Этот шаблон предоставляет промежуточный класс, который обычно управляет связью между различными классами и поддерживает слабую связь, что упрощает поддержку кода. Медиаторный паттерн — это поведенческий паттерн.
вводить
намерение:Промежуточный объект используется для инкапсуляции ряда объектных взаимодействий.Посредник делает так, что объектам не нужно явно ссылаться друг на друга, так что связь является слабой, и взаимодействие между ними может быть изменено независимо.
Основное решение:Между объектами существует большое количество ассоциаций, что неизбежно приведет к очень сложной структуре системы, в то же время, если объект изменяется, нам также необходимо отслеживать связанные с ним объекты и соответствующим образом с ними обращаться.
Когда использовать:Несколько классов связаны друг с другом, чтобы сформировать сетчатую структуру.
Как решить:Вышеупомянутая сетчатая структура разделена на звездчатую структуру.
Ключевой код:Связь между объектами Colleague инкапсулируется в класс и обрабатывается отдельно.
Приложения:
- До вступления Китая в ВТО разные страны торговали друг с другом по сложной структуре, теперь разные страны торгуют друг с другом через ВТО.
- Диспетчерская система аэропорта.
- Фреймворк MVC, где C (контроллер) является посредником между M (моделью) и V (представлением).
преимущество:
- Уменьшите сложность класса и преобразуйте один ко многим в один к одному.
- Разделение между классами.
- В соответствии с принципом Деметры.
недостаток:Посредники могут стать большими, сложными и сложными в обслуживании.
используемые сцены:
- Между объектами в системе существует сложная ссылочная связь, что приводит к хаотичной структуре зависимостей между ними и затруднению повторного использования объекта.
- Хотите инкапсулировать поведение в нескольких классах через промежуточный класс, не создавая слишком много подклассов.
Меры предосторожности:Не следует использовать, когда обязанности сбивают с толку.
режим заметки
Шаблон Memento сохраняет определенное состояние объекта, чтобы его можно было восстановить при необходимости. Паттерн памятки — это поведенческий паттерн.
вводить
намерение:Не нарушая инкапсуляции, зафиксируйте внутреннее состояние объекта и сохраните это состояние вне объекта.
Основное решение:Так называемый режим мемо заключается в захвате внутреннего состояния объекта и сохранении этого состояния вне объекта без разрушения инкапсуляции, чтобы впоследствии объект можно было восстановить в исходное состояние.
Когда использовать:Много раз нам всегда нужно записывать внутреннее состояние объекта, Цель этого состоит в том, чтобы позволить пользователю отменить неуверенную или неправильную операцию и восстановить его исходное состояние, чтобы у него было «лекарство от сожаления».
Как решить:Состояние объекта сохраняется исключительно через класс сувениров.
Ключевой код:Клиент не связан с классом меморандумов, а связан с классом управления меморандумами.
Приложения:
- Медицина сожаления.
- Сохраняйте, играя в игры.
- ctri+z в Windows.
- Назад в IE.
- Управление транзакциями базы данных.
преимущество:
- Он предоставляет пользователям механизм, который может восстанавливать состояние, чтобы пользователи могли легко вернуться к определенному историческому состоянию.
- Реализована инкапсуляция информации, так что пользователям не нужно заботиться о деталях сохранения состояния.
недостаток:Потребляйте ресурсы. Если в классе слишком много переменных-членов, это будет занимать много ресурсов, и каждое сохранение будет потреблять определенный объем памяти.
используемые сцены:
- Соответствующие сценарии состояния, в которых данные необходимо сохранить/восстановить.
- Обеспечивает откат операции.
Меры предосторожности:
- Для того, чтобы соблюдать принцип Деметры, но и добавить класс служебной записки.
- Для экономии памяти используйте режим прототипа + режим заметок.
Шаблон наблюдателя
Когда между объектами существует отношение «один ко многим», используется шаблон наблюдателя. Например, при изменении объекта автоматически уведомляются его зависимые объекты. Паттерн Наблюдатель — это поведенческий паттерн.
вводить
намерение:Определите зависимость между объектами по принципу «один ко многим».При изменении состояния объекта все объекты, зависящие от него, получают уведомление и автоматически обновляются.
Основное решение:Проблема уведомления других объектов об изменении состояния объекта с учетом простоты использования и низкой связанности обеспечивает высокую степень совместной работы.
Когда использовать:Когда состояние объекта (целевого объекта) изменяется, все зависимые объекты (объекты-наблюдатели) получают уведомление и широковещательное уведомление.
Как решить:Используя объектно-ориентированные методы, эту зависимость можно ослабить.
Ключевой код:В абстрактном классе есть ArrayList для хранения наблюдателей.
Приложения:
- Во время аукциона аукционист наблюдает за самой высокой ставкой, а затем уведомляет других участников торгов о ставках.
- В «Путешествии на Запад» Вуконг попросил бодхисаттву отдать красного мальчика, и бодхисаттва окропил землю водой и привлек старую черепаху, которая была наблюдателем.
преимущество:
- Наблюдатель и наблюдаемое абстрактно связаны.
- Создайте спусковой механизм.
недостаток:
- Если наблюдаемый объект имеет много прямых и косвенных наблюдателей, потребуется много времени, чтобы уведомить всех наблюдателей.
- Если между наблюдателем и целью наблюдения существует циклическая зависимость, цель наблюдения инициирует циклический вызов между ними, что может привести к сбою системы.
- Шаблон наблюдателя не имеет соответствующего механизма, позволяющего наблюдателю узнать, как изменился наблюдаемый целевой объект, а только знать, что наблюдаемая цель изменилась.
используемые сцены:
- Абстрактная модель имеет два аспекта, один из которых зависит от другого. Инкапсуляция этих аспектов в отдельные объекты позволяет изменять и повторно использовать их независимо друг от друга.
- Изменение одного объекта приведет к изменению одного или нескольких других объектов, и неизвестно, сколько объектов изменится, что может уменьшить связь между объектами.
- Объект должен уведомлять другие объекты, не зная, кто эти объекты.
- В системе необходимо создать триггерную цепочку, поведение объекта A повлияет на объект B, поведение объекта B повлияет на объект C..., вы можете использовать шаблон наблюдателя для создания механизма триггера цепочки.
Меры предосторожности:
- В JAVA уже есть классы, поддерживающие шаблон Observer.
- Избегайте циклических ссылок.
- При последовательном выполнении ошибка наблюдателя приведет к зависанию системы, как правило, с использованием асинхронного метода.
режим состояния
В шаблоне состояния поведение класса изменяется в зависимости от его состояния. Этот тип шаблона проектирования является поведенческим шаблоном.
В шаблоне состояния мы создаем объекты, представляющие различные состояния, и объект контекста, поведение которого изменяется при изменении объекта состояния.
вводить
намерение:Позволяет объекту изменять свое поведение при изменении его внутреннего состояния, когда объект изменяет свой класс.
Основное решение:Поведение объекта зависит от его состояния (свойств), и связанное с ним поведение может быть изменено по мере изменения его состояния.
Когда использовать:Код содержит множество условных операторов, связанных с состоянием объекта.
Как решить:Абстрагируйте различные конкретные классы состояний.
Ключевой код:Обычно в интерфейсе командного режима есть только один метод. Интерфейс шаблона состояния имеет один или несколько методов. Более того, методы класса реализации шаблона состояния обычно возвращают значение или изменяют значение переменной экземпляра. То есть схема состояния обычно связана с состоянием объекта. Методы реализующего класса имеют различную функциональность, переопределяя методы в интерфейсе. Шаблон состояния, как и шаблон команды, также можно использовать для устранения операторов условного выбора, таких как if...else.
Приложения:
- Спортсмены могут иметь нормальные состояния, ненормальные состояния и сверхнормальные состояния при игре в баскетбол.
- В звонке Цзэн Хоуи «Чжун — это абстрактный интерфейс», «Чжун А» и т. д. — это конкретные состояния, а «Колокольчик Цзэн Хоуи» — это конкретный контекст (Контекст).
преимущество:
- Инкапсулирует правила преобразования.
- Чтобы перечислить возможные состояния, вам необходимо определить тип состояния перед перечислением состояний.
- Поместите все поведения, связанные с определенным состоянием, в класс и можете легко добавлять новые состояния, нужно только изменить состояние объекта, чтобы изменить поведение объекта.
- Разрешить интеграцию логики перехода состояния с объектом состояния вместо одного гигантского блока условных операторов.
- Объект состояния может совместно использоваться несколькими объектами среды, тем самым уменьшая количество объектов в системе.
недостаток:
- Использование шаблона состояния неизбежно увеличивает количество системных классов и объектов.
- Структура и реализация шаблона состояния сложны, и при неправильном использовании структура программы и код будут хаотичными.
- Режим состояния не очень хорошо поддерживает «принцип открытого-закрытого».Для режима состояния, который может переключать состояния, добавление нового класса состояния требует модификации исходного кода, отвечающего за переход состояния, иначе он не может переключиться в новое состояние, и изменить определенное состояние.Поведение класса состояния также требует изменения исходного кода соответствующего класса.
используемые сцены:
- Сценарии, в которых поведение изменяется при изменении состояния.
- Замена условных операторов и операторов ветвления.
Меры предосторожности:Используйте шаблон состояния, когда поведение ограничено состояниями, а состояний не более 5.
Режим пустого объекта
В шаблоне нулевого объекта нулевой объект заменяет проверку экземпляра нулевого объекта. Вместо проверки нулевых значений объекты Null отражают отношение, которое ничего не делает. Такие объекты Null также могут обеспечивать поведение по умолчанию, когда данные недоступны.
В шаблоне пустого объекта мы создаем абстрактный класс, который определяет различные операции для выполнения, и класс сущности, который расширяет этот класс, а также пустой класс объекта, который ничего не делает для реализации класса, который будет беспрепятственно использоваться там, где вам нужно проверить наличие нулевые значения.
режим стратегии
В шаблоне стратегии поведение класса или его алгоритма можно изменить во время выполнения. Этот тип шаблона проектирования является поведенческим шаблоном.
В шаблоне стратегии мы создаем объекты, представляющие различные стратегии, и объект контекста, поведение которого меняется по мере изменения объекта стратегии. Объект стратегии изменяет алгоритм выполнения контекстного объекта.
вводить
намерение:Определите серию алгоритмов, инкапсулируйте их один за другим и сделайте их взаимозаменяемыми.
Основное решение:Сложно и трудно поддерживать использование if...else, когда есть несколько похожих алгоритмов.
Когда использовать:В системе много-много классов, и только их непосредственное поведение отличает их.
Как решить:Инкапсулируйте эти алгоритмы в классы один за другим и замените их произвольно.
Ключевой код:реализовать тот же интерфейс.
Приложения:
- Трюки Чжугэ Ляна, каждый трюк - это стратегия.
- В качестве способа передвижения выберите велосипед На машине любой способ передвижения — это стратегия.
- LayoutManager в JAVA AWT.
преимущество:
- Алгоритм может свободно переключаться.
- Избегайте использования множественных условных суждений.
- Хорошая масштабируемость.
недостаток:
- Классы стратегии будут увеличиваться.
- Все классы политик должны быть доступны извне.
используемые сцены:
- Если в системе много классов, отличающихся только своим поведением, то использование шаблона стратегии может динамически позволить объекту выбирать одно поведение из множества вариантов поведения.
- Системе необходимо динамически выбирать один из нескольких алгоритмов.
- Если объект имеет много вариантов поведения, эти варианты поведения должны быть реализованы с использованием нескольких операторов условного выбора, если соответствующая схема не используется.
Меры предосторожности:Если в системе более четырех политик, необходимо рассмотреть возможность использования гибридного режима для решения проблемы расширения класса политик.
Режим шаблона
В шаблоне шаблона абстрактный класс предоставляет способ/шаблон, который определяет его методы. Его подклассы могут при необходимости переопределить реализацию метода, но вызовы будут выполняться так, как определено в абстрактном классе. Этот тип шаблона проектирования является поведенческим шаблоном.
вводить
намерение:Определить скелет алгоритма в операции, отложив некоторые шаги на подклассы. Шаблонные методы позволяют подклассам переопределять определенные шаги алгоритма без изменения его структуры.
Основное решение:Некоторые методы являются общими, но они переписываются в каждом подклассе.
Когда использовать:Есть несколько общих методов.
Как решить:Абстрагируйте эти общие алгоритмы.
Ключевой код:Реализованные в абстрактном классе, другие шаги реализуются в подклассе.
Приложения:
- При строительстве дома фундамент, электропроводка и водопроводные трубы остаются прежними, только на более позднем этапе строительства появляются отличия, такие как добавление чулана и забора. 2. В «Путешествии на Запад» Бодхисаттва поставил 81 сложность, что является логическим скелетом высшего уровня.
- Поддержка Hibernate в spring инкапсулирует некоторые предопределенные методы, такие как открытие транзакции, получение Session, закрытие Session и т. д. Программист не повторяет написанный код, который был стандартизирован, а просто выбрасывает сущность и сохраняет ее.
преимущество:
- Инкапсулируйте постоянную часть и расширьте переменную часть.
- Извлеките общий код для простоты обслуживания.
- Поведение управляется родительским классом и реализуется дочерним классом.
недостаток:Каждая отдельная реализация требует реализации подкласса, что приводит к увеличению количества классов и увеличению системы.
используемые сцены:
- Существуют методы, общие для нескольких подклассов с одинаковой логикой.
- Важно отметить, что сложные методы можно рассматривать как методы-шаблоны.
Меры предосторожности:Для предотвращения злонамеренных операций к общим методам шаблона добавляется ключевое слово final.
шаблон посетителя
В шаблоне посетителя (Visitor Pattern) мы используем класс посетителя, который меняет алгоритм выполнения класса элемента. Таким образом, алгоритм выполнения элемента может меняться по мере изменения посетителя. Этот тип шаблона проектирования является поведенческим шаблоном. В соответствии со схемой объект-элемент принял объект-посетитель, так что объект-посетитель может обрабатывать операции над объектом-элементом.
вводить
намерение:В основном отделяет структуры данных от манипулирования данными.
Основное решение:Стабильные структуры данных и непостоянные проблемы оперативной связи.
Когда использовать:Существует множество различных и несвязанных операций, которые необходимо выполнять над объектами в объектной структуре, и вам нужно избегать того, чтобы эти операции «загрязняли» классы этих объектов, используя шаблон посетителя для их инкапсуляции в классы.
Как решить:В посещаемом классе добавьте интерфейс для обеспечения внешнего приема посетителей.
Ключевой код:В классе основания данных есть метод, который принимает посетителя и передает посетителю ссылку на себя.
Приложения:Вы гость в доме друга, вы посетитель, друг принимает ваш визит, вы передаете описание друга, а затем делаете суждение по описанию друга, это режим гостя.
преимущество:
- Соблюдайте принцип единой ответственности.
- Отличная масштабируемость.
- гибкость.
недостаток:
- Публикация сведений об определенных элементах для посетителей нарушает принцип Деметры.
- Конкретные элементы сложнее изменить.
- Нарушение принципа инверсии зависимостей, полагаясь на конкретные классы, а не на абстракции.
используемые сцены:
- Класс, соответствующий объекту в структуре объекта, редко меняется, но часто необходимо определить новые операции над этой структурой объекта.
- Вам нужно выполнять множество различных и несвязанных операций над объектами в структуре объекта, и вам нужно избегать того, чтобы эти операции «загрязняли» классы этих объектов, и вы не хотите изменять эти классы по мере добавления новых операций.
Меры предосторожности:Посетители могут унифицировать функции и создавать отчеты, пользовательский интерфейс, перехватчики и фильтры.
Режим спецификации
Режим спецификации (Specification) можно рассматривать как расширение режима композиции. Иногда определенные условия в проекте определяют бизнес-логику, и эти условия могут быть извлечены и объединены с определенным отношением (и, или нет) для гибкой настройки бизнес-логики. Кроме того, в таких приложениях, как запрос и фильтрация, можно упростить всю логику реализации путем предварительного определения нескольких условий и последующего использования комбинации этих условий для обработки запроса или фильтрации вместо использования операторов логического суждения.
Каждое условие здесь является спецификацией, и несколько спецификаций/условий соединены последовательно, чтобы сформировать комбинированную спецификацию в логической связи.
шаблон посетителя
Мы идем к прилавку банка, чтобы заняться бизнесом.Как правило, есть несколько личных деловых прилавков.Вы можете пойти в любой из них, чтобы заняться бизнесом. Наш шаблон посетителя хорошо работает в этом сценарии: для банковских счетчиков их не нужно менять, то есть счетчики, которые обеспечивают личный бизнес сегодня и завтра, не нужно менять. Как посетители, мы можем прийти в банк сегодня, чтобы аннулировать счет, а завтра мы можем пойти в банк, чтобы обработать мобильный банкинг Это операции наших посетителей, которые постоянно меняются.
Шаблон посетителя должен представлять операцию, которая воздействует на каждый элемент в структуре объекта. Это позволяет вам определять новые операции над элементами без изменения их классов.
Шаблон MVC
Шаблон MVC означает шаблон Model-View-Controller. Этот шаблон используется для многоуровневой разработки приложений.
- Модель- Модель представляет собой объект или JAVA POJO, который обращается к данным. Он также может иметь логику для обновления контроллера при изменении данных.
- Вид- Представления представляют собой визуализации данных, содержащихся в модели.
- Контроллер- Контроллеры воздействуют на модели и представления. Он управляет потоком данных для объектов модели и обновляет представления по мере изменения данных. Он отделяет вид от модели.
модель бизнес-представителя
Шаблон бизнес-делегата используется для разделения уровня представления и бизнес-уровня. В основном он используется для сокращения функций связи или удаленных запросов до кода бизнес-уровня в коде уровня представления. На бизнес-уровне у нас есть следующие объекты.
- Клиент (Клиент)- Код уровня представления может быть JSP, сервлетом или java-кодом пользовательского интерфейса.
- Бизнес Делегат- Класс входа для клиентских сущностей, предоставляющий доступ к методам бизнес-службы.
- Служба поиска- Объект службы поиска отвечает за получение соответствующей бизнес-реализации и предоставление бизнес-объекту доступа к объекту бизнес-представителя.
- Бизнес Сервис- Интерфейс бизнес-сервиса. Класс сущности, реализующий бизнес-службу, обеспечивает фактическую логику бизнес-реализации.
шаблон составного объекта
Шаблон составного объекта используется в механизме сохраняемости EJB. Составной объект — это объектный компонент EJB, представляющий диаграмму объекта. Когда составной объект обновляется, внутренние компоненты зависимостей обновляются автоматически, поскольку они управляются компонентом объекта EJB. Ниже приведены актеры, которые составляют компоненты управления данными.
- Составной объект- Это основной объектный компонент. Он может быть крупнозернистым или может содержать крупнозернистый объект для постоянных жизней.
- Крупнозернистый объект- Объект содержит зависимые объекты. Он имеет собственный жизненный цикл, а также может управлять жизненным циклом зависимых объектов.
- Зависимый объект- Зависимый объект — это объект, постоянное время жизни которого зависит от объекта общего назначения.
- Стратегии- Стратегия указывает, как реализовать составной объект.
Шаблон объекта доступа к данным
Шаблон объекта доступа к данным или шаблон DAO используется для отделения API или операций доступа к данным низкого уровня от бизнес-сервисов высокого уровня. Ниже приведены участники шаблона объекта доступа к данным.
- Интерфейс объекта доступа к данным- Этот интерфейс определяет стандартные операции, которые должны выполняться над объектом модели.
- Конкретный класс объекта доступа к данным- Этот класс реализует вышеуказанный интерфейс. Этот класс отвечает за получение данных из источника данных, которым может быть база данных, xml или другой механизм хранения.
- Объект модели/объект значения- объект представляет собой простой POJO, содержащий методы get/set для хранения полученных данных с использованием классов DAO.
Режим переднего контроллера
Шаблон Front Controller используется для обеспечения централизованного механизма обработки запросов, при котором все запросы будут обрабатываться одним обработчиком. Обработчик может выполнять аутентификацию/авторизацию/регистрацию или отслеживать запрос и передавать запрос соответствующему обработчику. Ниже приведены сущности этого шаблона проектирования.
- Передний контроллер- Единый обработчик, который обрабатывает все типы запросов для приложения, которое может быть веб-приложением или настольным компьютером.
- Диспетчер- Фронт-контроллер может использовать объект диспетчера для отправки запросов соответствующему конкретному обработчику.
- Посмотреть (Просмотреть)- Представления — это объекты, созданные для запросов.
Режим фильтра перехвата
Шаблон перехватывающего фильтра используется для предварительной/постобработки запроса или ответа приложения. Фильтры определяются и применяются к запросам до их передачи фактическому целевому приложению. Фильтры могут выполнять аутентификацию/авторизацию/регистрацию или отслеживать запросы и передавать их соответствующему обработчику. Ниже приведены сущности этого шаблона проектирования.
- Фильтр (Фильтр)- Фильтры выполняют определенные задачи до или после того, как обработчик запроса выполнит запрос.
- Цепочка фильтров- Цепочка фильтров берет несколько фильтров и выполняет их на цели в определенном порядке.
- Target- Объект Target является обработчиком запроса.
- Диспетчер фильтров- Диспетчер фильтров для управления фильтрами и цепочками фильтров.
- Клиент (Клиент)- Клиент — это объект, который отправляет запрос целевому объекту.