Заметки по изучению Java проектировочных паттернов (Шанси Гуань) (иллюстрации + анализ исходного кода фреймворков)
**Сортировка и анализ затрат времени, пожалуйста, поддержите меня кнопкой "три в одном"
**
**Сортировка и анализ затрат времени, пожалуйста, поддержите меня кнопкой "три в одном"
****Сортировка и анализ затрат времени, пожалуйста, поддержите меня кнопкой "три в одном"
**
Давайте начнем~
Уровни мастерства часто схожи
:person_fencing: Уровни мастерства меча Уникального Гу Бу
Три уровня мастерства, предложенные цзиньским литератором Ван Гуань в "Чжуньцзянь Цзыхуа"
Три уровня мастерства, предложенные цзиньским литератором Ван Гуань в "Чжуньцзянь Цзыхуа"
Переиспользуемость
Читаемость
Расширяемость
:policeman: Надежность
Поддерживаемость
Гибкость
Высокая когерентность, низкая耦合度## 2. Семь принципов проектирования
Принцип единственной обязанности (Single Responsibility Principle): класс должен выполнять только одну обязанность
Принцип разделения интерфейсов (Interface Segregation Principle): зависимость одного класса от другого должна основываться на минимальном интерфейсе
Принцип инверсии зависимостей (Dependence Inversion Principle): программирование к интерфейсу
Принцип Лисков (Liskov Substitution Principle): использовать агрегацию и композицию вместо наследования
Принцип открытия/закрытия (OCP, Open Closed Principle): открыт для расширения, закрыт для изменения
Принцип Деметры (Demeter Principle): принцип наименьшего знания, взаимодействовать только с непосредственными друзьями
Принцип композиции и переиспользования (Composite Reuse Principle): использовать агрегацию и композицию вместо наследования
Классификация | Паттерны проектирования | Примеры | Исходный код | Преимущества | Недостатки |
---|---|---|---|---|---|
Паттерны создания | Паттерн одиночка | 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 )