Абстрактный класс полезен, когда вам нужно значительное количество
функциональность должна быть одинаковой для всех подклассов, например, в
корзина с несколькими способами оплаты доступны, вы можете
иметь абстрактный класс, который определяет общий метод оплаты, и
иметь подклассы, наследуемые от суперкласса для каждого фактического платежа
метод, который вы хотите поддержать (PayPal, кредитная карта, учетная запись и т. д.).
Механизм разрешения платежа будет отличаться для каждого
подкласс, но все они выполняют по существу одну и ту же функцию - они
подтвердить, что пользователь может доказать, что он может заплатить за товар или
рассматриваемые услуги.
Примером полезного интерфейса является тот, где вы не имели отношения
предметы, которые должны обеспечивать аналогичную функциональность в униформе
путь. Например, у вас может быть CMS, где статьи хранятся в
базы данных, но где система кэширует их на диск, а также HTML
страниц, пока статья в базе данных не будет изменена, после чего
физический файл удаляется до следующего доступа к
скопировать в базу данных. Ваша CMS также может поддерживать возможность
пользователи могут загружать изображения, PDF-файлы и т. д. для хранения на диске,
но вы определенно не хотите, чтобы эти файлы были удалены как копия на
диск представляет собой сам файл, а не кешированную версию. В этом
В этом случае вы можете создать интерфейс Cacheable, который говорит, какие методы
класс, который кэшируется на диск, должен быть реализован, оставляя его
к самому классу, чтобы реализовать их. Это имеет больше смысла, как
классы, которые представляют различные виды данных, почти наверняка нуждаются
реализовать свою схему кэширования (если есть) по-другому.
Каждый класс, который разрешает кэширование, будет определен как Класс
реализует Cacheable, который вы можете проверить в
ваш код. Менее опытные программисты могут проверить класс объекта
они работают, получая класс и обрабатывая результат
с большим заявлением переключателя. Это не правильный подход, потому что
это означает, что вы предполагаете, что определенные объекты классов реализуют
определенную функциональность, и если вы добавите новый класс в систему, вы
необходимо изменить каждый оператор переключения в вашем программном обеспечении, чтобы принять его в
учетная запись. Если вы используете интерфейс, вы можете проверить, является ли объект
реализует этот интерфейс с ключевым словом instanceof.
if ($thisObject instanceof Cacheable)
{
// Manage item's cache
}
Этот подход лучше, потому что он устраняет оператор switch и
таким образом облегчает обслуживание вашего программного обеспечения. Если вы добавите новый класс
к системе, которая также реализует свою собственную схему кэширования, то вы
просто нужно объявить, что он реализует Cacheable. Как интерфейс
требует, чтобы все классы реализовали его для объявления указанных методов
в интерфейсе вы можете быть уверены, что любой класс, который реализует
Cacheable предоставит вам определенные методы для использования. Ваш код
не нужно знать, как класс реализует эти методы, просто
он их реализует.
Эти понятия несколько сложнее объяснить, чем научиться
использовать боюсь, надеюсь, у меня есть основные идеи через хорошо
достаточно, чтобы вы сами их выяснили.