У меня есть класс продуктов. Теперь я хочу добавить на свой сайт какой-нибудь модуль скидок, который должен взаимодействовать с классом Products.
В настоящее время единственное решение, которое я могу придумать, - это использование какого-либо шаблона декоратора для наложения класса продукта, чтобы он мог изменить цену продукта.
Как это:
class Product {
function price() {
return 10;
}
}
class ProductDiscountDecorator {
private $product;
function __construct($product) {
$this->product = $product;
}
function price() {
return $this->product->price()*0.8;
}
}
$product = new ProductDiscountDecorator(new Product());
echo $product->price();
Это скидка, цены должны быть скорректированы на каждой странице сайта. Таким образом, каждая страница, использующая класс Product, должна также добавить декоратор. Единственный способ решить эту проблему - использовать фабрику, которая автоматически добавляет этот декоратор.
$product = $factory->get('product'); // returns new ProductDiscountDecorator(new Product());
Возможно, это сработает, но я чувствую, что здесь неправильно использую шаблон декоратора.
Ребята, у вас есть какие-нибудь мысли по этому поводу? Как бы вы реализовали что-то подобное?