Предисловие: Потребовалось некоторое время, чтобы снова ознакомиться с шаблоном проектирования, в основном для справки.design-patterns-for-humans, У меня также есть некоторые идеи, мои возможности ограничены, если я столкнусь с чем-то не так, я надеюсь указать на исправления, спасибо
Если у вас есть, пожалуйстадобавить маленькую звездочку, если выигрыша нет, то можнобыть против нет помощи отчетСанлиан
ноль, используйте
1. Установка
composer create-project -s dev omgzui/design-pattern
or
git clone https://github.com/OMGZui/DesignPattern
composer install
2. Тест
vendor/bin/phpunit tests/
1. Что такое шаблон проектирования
Из вики:
существуетразработка программного обеспечениясередина,Шаблоны проектирования(шаблон проектирования) дадизайн программного обеспеченияРазличные проблемы, которые преобладают (и повторяются) в предлагаемом решении. Этот термин определяетсяЭрих Гамма(Эрих Гамма) и др. в 1990-х гг.архитектурный дизайнВ полеИнформатикаиз.
Шаблоны проектирования не используются напрямую для достижениякод, а решение, которое описывает, как решить проблему в различных ситуациях.объектно-ориентированныйШаблоны проектирования обычно начинаются скатегорияилиобъектдля описания отношений и взаимодействий, но не конкретных классов или объектов, используемых для завершения приложения. Шаблоны проектирования могут поставить нестабильность в зависимость от относительной стабильности, конкретность — в зависимость от относительной абстракции, избежать неприятных тесных связей и улучшить способность разработки программного обеспечения справляться с изменениями и адаптироваться к ним.
Не все шаблоны программного обеспечения являются шаблонами проектирования, а шаблоны проектирования относятся конкретно к проблемам на уровне «дизайна» программного обеспечения. Существуют и другие шаблоны, которые не являются шаблонами проектирования, напримерархитектурный узор. в то же время,алгоритмЕго нельзя рассматривать как шаблон проектирования, потому что алгоритмы в основном используются для решения вычислительных задач, а не задач проектирования.
С ростом интереса к шаблонам проектирования в сообществе разработчиков программного обеспечения было опубликовано несколько связанных монографий, регулярно проводились соответствующие семинары иУорд Каннингем(Уорд Каннингем) изобрел для этогоWikiWikiИспользуется для обмена опытом с шаблонами проектирования.
Шаблоны проектирования представляют собой передовой опыт и обычно используются опытными разработчиками объектно-ориентированного программного обеспечения. Шаблоны проектирования — это решения общих проблем, с которыми разработчики программного обеспечения сталкиваются во время разработки программного обеспечения. Эти решения являются результатом проб и ошибок многочисленных разработчиков программного обеспечения в течение значительного периода времени.
Короче говоря, узор дизайна представляет собой набор решений с целью повторного использования кода при обеспечении надежности кода
2. Типы шаблонов проектирования
- Режим создания (Creational):
这些设计模式提供了一种在创建对象的同时隐藏创建逻辑的方式,而不是使用 new 运算符直接实例化对象。这使得程序在判断针对某个给定实例需要创建哪些对象时更加灵活
- Структурный режим:
这些设计模式关注类和对象的组合。继承的概念被用来组合接口和定义组合对象获得新功能的方式
- Поведенческий режим:
这些设计模式特别关注对象之间的通信
Три, шесть принципов шаблонов проектирования
- Принцип открытия-закрытия
Принцип «открыто-закрыто» означает:对扩展开放,对修改关闭
. Когда программу необходимо расширить, исходный код нельзя изменить для достижения эффекта «горячей замены». Короче говоря, это сделать программу расширяемой, простой в обслуживании и обновлении. Для достижения этого эффекта нам нужно использовать интерфейсы и абстрактные классы, о которых мы упомянем позже в конкретном дизайне.
- Принцип замены Лисков
Принцип подстановки Лисков — один из основных принципов объектно-ориентированного проектирования. Принцип замещения Лисков гласит, что везде, где может появиться базовый класс, должен появиться подкласс. ЛСП это继承复用的基石
Только тогда, когда производные классы могут заменить базовый класс, и базовый класс можно действительно использовать повторно, когда функция программного модуля не затрагивается, и производный класс может добавить новое поведение на основе базового класса. Принцип удаления дополняет принцип открытия и закрытия. Ключевым шагом достижения принципа открытия и закрытия является абстракция, а наследование базового класса и подкласса — это конкретная реализация абстракции, поэтому принцип замены — это конкретный шаг достижения абстракции.
- Принцип обращения зависимости
Этот принцип лежит в основе принципа открытого-закрытого, который включает в себя:针对接口编程
, который зависит от абстрактного, а не от конкретного.
- Принцип разделения интерфейса
Этот принцип означает, что лучше использовать несколько изолированных интерфейсов, чем использовать один интерфейс. У него есть и другое значение: уменьшить связь между классами. Можно видеть, что на самом деле шаблон проектирования представляет собой идею проектирования программного обеспечения, которая начинается с крупномасштабной архитектуры программного обеспечения и которую легко обновлять и поддерживать.降低依赖,降低耦合
.
- Закон Деметры, также известный как принцип наименьшего знания (принцип Деметры).
Принцип наименьшего знания означает, что сущность должна как можно меньше взаимодействовать с другими сущностями, чтобы функциональные модули системы были относительно独立
.
- Составной принцип повторного использования
Принцип синтеза и повторного использования средств: использовать как можно больше合成/聚合
способ вместо использования наследования.
Четыре, диаграмма классов UML
1. понять диаграммы класса UML
простой каштан
- Структура диаграммы классов автомобиля
abstract
, что указывает на то, что автомобиль является абстрактным классом - Он имеет два унаследованных класса: автомобиль и велосипед, связь между которыми является отношением реализации, используя класспунктирная линия с полой стрелкойвыражать
- Отношение между автомобилем и внедорожником также является отношением наследования, а отношение между ними — отношением обобщения.Сплошная линия с полой стрелкойвыражать
- Существует комбинированная связь между автомобилем, двигателем и шинами.Сплошная линия со сплошной стрелкойвыражать
- Существует совокупная связь между учениками и классами, использующаяСплошная линия с полой стрелкойвыражать
- Между учащимися и удостоверениями личности существует ассоциативное отношение с использованием единогоСплошная линиявыражать
- Учащиеся должны использовать велосипеды, чтобы ходить в школу, что является зависимым отношением к велосипедам.пунктирная линия со стрелкойвыражать
2. Объяснение
- Отношение реализации наследуется от абстрактных классов, а отношение обобщения наследуется от неабстрактных классов.
- Соотношение комбинации сильно зависимо. Например, автомобиль на картинке выше состоит из двигателя и шин. Когда автомобиля нет, двигатель и шины также исчезают.
- Сильно ли зависит агрегация, например, класс на картинке выше состоит из учеников, класс ушел, ученики все еще там
- Отношения ассоциации тесно связаны.Например, учащийся на картинке выше связан с удостоверением личности.Можно сказать, что удостоверение личности может представлять учащегося, и учащийся также может представлять удостоверение личности.
- Отношения зависимости, как правило, односторонние, а двухсторонняя зависимость очень плохая.Например, на картинке выше ученики полагаются на велосипеды, но ученикам нет смысла полагаться на велосипеды.В то же время ученики могут также полагаться на автобусы стоимостью в миллионы или метро стоимостью в сотни миллионов, просто временная зависимость