Простые для понимания шаблоны проектирования

Шаблоны проектирования
Простые для понимания шаблоны проектирования

Предисловие: Потребовалось некоторое время, чтобы снова ознакомиться с шаблоном проектирования, в основном для справки.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 运算符直接实例化对象。这使得程序在判断针对某个给定实例需要创建哪些对象时更加灵活
    • Простой заводской шаблонпортал
    • Шаблон абстрактного метода (шаблон фабричного метода)портал
    • Абстрактный заводской узорпортал
    • Синглтон шаблонпортал
    • Шаблон строителяпортал
    • Использование шаблона прототипа PHPcloneЭто может достичь цели уменьшения накладных расходов
  • Структурный режим:这些设计模式关注类和对象的组合。继承的概念被用来组合接口和定义组合对象获得新功能的方式
  • Поведенческий режим:这些设计模式特别关注对象之间的通信

Три, шесть принципов шаблонов проектирования

  • Принцип открытия-закрытия

Принцип «открыто-закрыто» означает:对扩展开放,对修改关闭. Когда программу необходимо расширить, исходный код нельзя изменить для достижения эффекта «горячей замены». Короче говоря, это сделать программу расширяемой, простой в обслуживании и обновлении. Для достижения этого эффекта нам нужно использовать интерфейсы и абстрактные классы, о которых мы упомянем позже в конкретном дизайне.

  • Принцип замены Лисков

Принцип подстановки Лисков — один из основных принципов объектно-ориентированного проектирования. Принцип замещения Лисков гласит, что везде, где может появиться базовый класс, должен появиться подкласс. ЛСП это继承复用的基石Только тогда, когда производные классы могут заменить базовый класс, и базовый класс можно действительно использовать повторно, когда функция программного модуля не затрагивается, и производный класс может добавить новое поведение на основе базового класса. Принцип удаления дополняет принцип открытия и закрытия. Ключевым шагом достижения принципа открытия и закрытия является абстракция, а наследование базового класса и подкласса — это конкретная реализация абстракции, поэтому принцип замены — это конкретный шаг достижения абстракции.

  • Принцип обращения зависимости

Этот принцип лежит в основе принципа открытого-закрытого, который включает в себя:针对接口编程, который зависит от абстрактного, а не от конкретного.

  • Принцип разделения интерфейса

Этот принцип означает, что лучше использовать несколько изолированных интерфейсов, чем использовать один интерфейс. У него есть и другое значение: уменьшить связь между классами. Можно видеть, что на самом деле шаблон проектирования представляет собой идею проектирования программного обеспечения, которая начинается с крупномасштабной архитектуры программного обеспечения и которую легко обновлять и поддерживать.降低依赖,降低耦合.

  • Закон Деметры, также известный как принцип наименьшего знания (принцип Деметры).

Принцип наименьшего знания означает, что сущность должна как можно меньше взаимодействовать с другими сущностями, чтобы функциональные модули системы были относительно独立.

  • Составной принцип повторного использования

Принцип синтеза и повторного использования средств: использовать как можно больше合成/聚合способ вместо использования наследования.

Четыре, диаграмма классов UML

1. понять диаграммы класса UML

простой каштан

uml图

  • Структура диаграммы классов автомобиляabstract, что указывает на то, что автомобиль является абстрактным классом
  • Он имеет два унаследованных класса: автомобиль и велосипед, связь между которыми является отношением реализации, используя класспунктирная линия с полой стрелкойвыражать
  • Отношение между автомобилем и внедорожником также является отношением наследования, а отношение между ними — отношением обобщения.Сплошная линия с полой стрелкойвыражать
  • Существует комбинированная связь между автомобилем, двигателем и шинами.Сплошная линия со сплошной стрелкойвыражать
  • Существует совокупная связь между учениками и классами, использующаяСплошная линия с полой стрелкойвыражать
  • Между учащимися и удостоверениями личности существует ассоциативное отношение с использованием единогоСплошная линиявыражать
  • Учащиеся должны использовать велосипеды, чтобы ходить в школу, что является зависимым отношением к велосипедам.пунктирная линия со стрелкойвыражать

2. Объяснение

  • Отношение реализации наследуется от абстрактных классов, а отношение обобщения наследуется от неабстрактных классов.
  • Соотношение комбинации сильно зависимо. Например, автомобиль на картинке выше состоит из двигателя и шин. Когда автомобиля нет, двигатель и шины также исчезают.
  • Сильно ли зависит агрегация, например, класс на картинке выше состоит из учеников, класс ушел, ученики все еще там
  • Отношения ассоциации тесно связаны.Например, учащийся на картинке выше связан с удостоверением личности.Можно сказать, что удостоверение личности может представлять учащегося, и учащийся также может представлять удостоверение личности.
  • Отношения зависимости, как правило, односторонние, а двухсторонняя зависимость очень плохая.Например, на картинке выше ученики полагаются на велосипеды, но ученикам нет смысла полагаться на велосипеды.В то же время ученики могут также полагаться на автобусы стоимостью в миллионы или метро стоимостью в сотни миллионов, просто временная зависимость

5. Информация