Спасибо за ответ. Гляньте пожалуйста, на эти две страницы и помогите понять (в двух словах) как этот пример работает.
1. Если не понимаете, как работает этот код, то причины две:
- вы ещё не "доросли" до этого кода и вам это не надо пока знать, а нужно практиковаться на более легком ОО-коде
- вы не выучили синтаксис PHP в отношении классов
Работает это так: у вас есть класс Lesson, у которого есть значение duration (продолжительность) и значение ConstStrategy - объект, содержащий алгоритм подсчета стоимости, вынесенный в отдельный класс.
Вам нужно подсчитать стоимость cost у объекта Lesson.
Для того, что бы алгоритм подсчета можно было в случае надобности заменить и создать код, позволяющий рассчитывать стоимость на основании разных стратегий оплаты уроков, алгоритм выносится в отдельный класс, точнее - в два отдельных класса - TimedConstStrategy и FixedConstStrategy. У каждого из этик классов есть метод const, который принимает ссылку на класс Lesson, в котором содержится значение duration, которое и используется этими классами для подсчета стоимости.
В случае класса TimedConstStrategy стоимость рассчитывается по алгоритмы duration * 5, а в случае FixedConstStrategy значение duration не используется (хотя может).
Всё это дает универсальность и низкую связанность кода. В любой момент можно написать кучу других классов ConstStrategy, которые могут рассчитывать стоимость уроков по совершено разным алгоритмам. Если бы мы все алгоритмы пихали бы в метод cost класса Lesson, то это было бы не красиво, громоздко, не удобно.
А пример все таки интересный, я зря на него грешил.