1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/vectorx-NOTE_DesignPatterns

В этом репозитории не указан файл с открытой лицензией (LICENSE). При использовании обратитесь к конкретному описанию проекта и его зависимостям в коде.
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Проектировочные паттерны

Введение

:sparkles: Заметки по изучению Java проектировочных паттернов (Шанси Гуань) (иллюстрации + анализ исходного кода фреймворков)

Обновления

**Сортировка и анализ затрат времени, пожалуйста, поддержите меня кнопкой "три в одном" :heart: :heart: :heart: **

**Сортировка и анализ затрат времени, пожалуйста, поддержите меня кнопкой "три в одном" :heart: :heart: :heart: ****Сортировка и анализ затрат времени, пожалуйста, поддержите меня кнопкой "три в одном" :heart: :heart: :heart: **

:sparkles: Давайте начнем~


0. Уровни мастерства проектировочных паттернов

Уровни мастерства часто схожи

:person_fencing: Уровни мастерства меча Уникального Гу Бу

  • :crossed_swords: Синий стальной меч : один за другим, совершенные приемы
  • :crossed_swords: Фиолетовый меч : изменения приемов, мягкость побеждает жесткость
  • :crossed_swords: Меч из玄铁 : методы передачи силы, давление силой
  • :crossed_swords: Деревянный меч : быстрота побеждает медлительность, сила побеждает слабость
  • :crossed_swords: Без меча : внешнее проявление внутренней силы, атака через энергию

:book: Три уровня мастерства, предложенные цзиньским литератором Ван Гуань в "Чжуньцзянь Цзыхуа"

  • :city_sunrise: Вчера вечером западный ветер срезал зеленые деревья, я одиноко поднимаюсь на высокую башню, чтобы увидеть конец земли
  • :womans_clothes: Широкий пояс постепенно истончается, но я не жалею, я готов пожертвовать собой ради нее
  • :izakaya_lantern: Я искал его тысячи раз, и вдруг, оглядываясь, обнаружил, что он был там, где светились фонари

:book: Три уровня мастерства, предложенные цзиньским литератором Ван Гуань в "Чжуньцзянь Цзыхуа"

  • :city_sunrise: Вчера вечером западный ветер срезал зеленые деревья, я одиноко поднимаюсь на высокую башню, чтобы увидеть конец земли
  • :womans_clothes: Широкий пояс постепенно истончается, но я не жалею, я готов пожертвовать собой ради нее
  • :izakaya_lantern: Я искал его тысячи раз, и вдруг, оглядываясь, обнаружил, что он был там, где светились фонари

1. Цели проектировочных паттернов:computer: Проектировочные паттерны предназначены для того, чтобы программы (программное обеспечение) обладали лучшими:

  • :recycle: Переиспользуемость

  • :book: Читаемость

  • :link: Расширяемость

  • :policeman: Надежность

  • :wrench: Поддерживаемость

  • :snowboarder: Гибкость

  • :pushpin: Высокая когерентность, низкая耦合度## 2. Семь принципов проектирования

  • :one: Принцип единственной обязанности (Single Responsibility Principle): класс должен выполнять только одну обязанность

  • :two: Принцип разделения интерфейсов (Interface Segregation Principle): зависимость одного класса от другого должна основываться на минимальном интерфейсе

  • :three: Принцип инверсии зависимостей (Dependence Inversion Principle): программирование к интерфейсу

  • :four: Принцип Лисков (Liskov Substitution Principle): использовать агрегацию и композицию вместо наследования

  • :five: Принцип открытия/закрытия (OCP, Open Closed Principle): открыт для расширения, закрыт для изменения

  • :six: Принцип Деметры (Demeter Principle): принцип наименьшего знания, взаимодействовать только с непосредственными друзьями

  • :seven: Принцип композиции и переиспользования (Composite Reuse Principle): использовать агрегацию и композицию вместо наследования

3. Отношения UML-диаграммы классов

  • Зависимость (dependence)
  • Обобщение (Generalization): то есть наследование
  • Реализация (Implementation)
  • Связь (Association): однонаправленное однозначное отношение; двунаправленное однозначное отношение
  • Агрегация (Aggregation)
  • Композиция (Composition)

4. Классификация шаблонов проектирования (5 + 7 + 11)

  • Создающие шаблоны (5 штук): Singleton, Factory, Abstract Factory, Prototype, Builder
  • Структурные шаблоны (7 штук): Adapter, Bridge, Decorator, Composite, Facade, Flyweight, Proxy
  • Поведенческие шаблоны (11 штук): Template Method, Command, Visitor, Iterator, Observer, Mediator, Memento, Interpreter, State, Strategy, Chain of Responsibility## 5. Определения 23 шаблонов проектирования
  1. Паттерн одиночки (Singleton Pattern): класс может иметь только один экземпляр.
  2. Паттерн фабрики (Factory Pattern): объект-фабрика определяет, какой экземпляр класса продукта создать.
  3. Паттерн прототипа (Prototype Pattern): использует прототипный экземпляр для определения типа создаваемого объекта и создает новые объекты путем копирования прототипа.
  4. Паттерн строителя / генератора (Builder Pattern): извлекает процесс создания сложного объекта в абстракцию, позволяя различным реализациям абстракции создавать объекты с различными характеристиками.
  5. Паттерн адаптера (Adapter Pattern): преобразует интерфейс одного класса в другой, ожидаемый клиентом.
  6. Паттерн моста (Bridge Pattern): разделяет абстракцию и реализацию, помещая их в отдельные классы, что позволяет независимо изменять их.
  7. Паттерн декоратора (Decorator Pattern): динамически добавляет новые функции к объекту.
  8. Паттерн композиции / составного объекта (Composite Pattern): использует структуру дерева для объединения объектов, представляющих части и целое.
  9. Паттерн фасада / интерфейса (Facade Pattern): предоставляет унифицированный интерфейс для вызывающего кода.
  10. Паттерн флюидов / легковесных объектов (Flyweight Pattern): использует технику совместного использования для эффективного поддержания большого количества мелких объектов.Паттерн прокси (Proxy Pattern): позволяет получить доступ к объекту через прокси-объект.
  11. Паттерн шаблонного метода (Template Method Pattern): определяет скелет алгоритма, откладывая некоторые шаги на подклассы.
  12. Паттерн команды (Command Pattern): разделяет объект, инициирующий запрос, и объект, выполняющий этот запрос.
  13. Паттерн посещения (Visitor Pattern): разделяет структуру данных и операции над ней.
  14. Паттерн итератора (Iterator Pattern): предоставляет унифицированный интерфейс для перебора элементов коллекции, используя одинаковый метод для перебора элементов.
  15. Паттерн наблюдателя (Observer Pattern): модель, в которой объекты (наблюдатели) зависят от одного или нескольких объектов (наблюдаемых) в одноранговой или многоранговой зависимости.
  16. Паттерн посредника (Mediator Pattern): использует объект-посредник для упаковки взаимодействия между объектами.
  17. Паттерн мемо (Memento Pattern): сохраняет внутреннее состояние объекта без нарушения его инкапсуляции.
  18. Паттерн интерпретатора (Interpreter Pattern): определяет язык и его грамматику, используя интерпретатор для интерпретации предложений этого языка.
  19. Паттерн состояния (State Pattern): решает проблему изменения поведения объекта в зависимости от его состояния.
  20. Шаблон стратегии (Strategy Pattern): определяет семейство алгоритмов, упаковывает их и делает их взаимозаменяемыми. 22.Шаблон цепочки ответственности (Chain of Responsibility Pattern): создает цепочку объектов-получателей для обработки запроса

6. Примеры 23 типов паттернов проектирования, исходный код и их преимущества/недостатки

Классификация Паттерны проектирования Примеры Исходный код Преимущества Недостатки
Паттерны создания Паттерн одиночка Singleton JDK java.lang.Runtime Экономия ресурсов, повышение производительности
~ Паттерн фабрики Пиццерия JDK Calendar Централизованное управление, удобство поддержки
~ Паттерн прототипа Клонированное животное Spring ApplicationContext Упрощение процесса, повышение эффективности Сложность; нарушение принципа OCP
~ Паттерн строителя Постройка дома JDK StringBuilder Разделение процесса создания
Паттерны структуры Паттерн адаптера Розетка SpringMVC HandlerAdapter Совместимость
~ Паттерн моста Мобильный телефон JDBC Driver Разделение абстракции и реализации
~ Паттерн декоратора Капучино Starbucks JDK FilterInputStream Динамическое расширение функциональности
~ Паттерн композиции Учебные заведения JDK HashMap Ясность уровня частей и целого
~ Паттерн фасада Управление кинотеатром MyBatis Configuration Скрытие деталей, упрощение операций Слишком много усложняет поддержку
~ Паттерн прокси Учитель преподает JDK Proxy Расширение функциональности, повышение безопасности
Паттерны поведения Паттерн шаблона Приготовление соевого молока Spring AbstractApplicationContext Централизация алгоритма, повторное использование кода Слишком много усложняет поддержку
Режим команд Интеллектуальное жилье Spring JdbcTemplate Разделение инициирования и выполнения запроса Сложно
Режим посещения Система оценки Разделение структуры данных и операций Нарушает принципы Лисков и инверсии зависимостей
Режим итерации Школа и факультеты JDK ArrayList Единство итерации Слишком много для поддержания
Режим наблюдателя Прогноз погоды JDK Observable Динамическое добавление сторонних
Режим посредника Интеллектуальное жилье Упаковка взаимодействия Сложно
Режим восстановления Восстановление состояния персонажа игры Удобство восстановления состояния Занимает ресурсы, увеличивает потребление памяти
~ Режим состояния АПП розыгрыш Платформа кредитования Разделение состояний Слишком много для поддержания
~ Режим стратегии Утка JDK Comparator Разделение неизменного и изменяющегося Слишком много для поддержания
~ Режим цепочки обязанностей Утверждение закупок SpringMVC HandlerExecutionChain Разделение запроса и обработки Сложность отладки; влияет на производительность

Лицензия Creative Commons Attribution 4.0 International (CC BY 4.0). Вы можете свободно: распространять — копировать, распространять и передавать эту работу в любом формате и на любом носителе; изменять — изменять, трансформировать или создавать на основе этой работы. Для любых целей, включая коммерческие, при соблюдении условий лицензии. Однако вы должны соблюдать следующие условия: атрибуция — вы должны указать полное имя автора, предоставить ссылку на лицензию и указать, были ли изменения внесены в оригинальную работу. Вы можете использовать любую разумную форму атрибуции, но не должны использовать это для подачи какого-либо заявления о поддержке со стороны лицензиара.

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Обучающие заметки по Java-паттернам проектирования (с иллюстрациями + анализ исходного кода фреймворка) от Шанси Гу (Shangsi Gu) Развернуть Свернуть
Отмена

Обновления

Пока нет обновлений

Участники

все

Язык

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/vectorx-NOTE_DesignPatterns.git
git@api.gitlife.ru:oschina-mirror/vectorx-NOTE_DesignPatterns.git
oschina-mirror
vectorx-NOTE_DesignPatterns
vectorx-NOTE_DesignPatterns
main