Ниже приведена реализация в PHP. Я хочу получить другой код купона и другую скидку, в зависимости от типа книги (винтажная или новая).
<?php
interface BookOffer {
function generateCoupon();
function generateDiscount();
}class VintageBookOffer implements BookOffer {
function generateCoupon() {
return "VINTAGECOUPONCODE";
}
function generateDiscount() {
return 10.0;
}
}class NewBookOffer implements BookOffer {
function generateCoupon() {
return "NEWBOOKCOUPONCODE";
}
function generateDiscount() {
return 5.0;
}
}class OfferGenerator {
function generateOffer($bookType) {
if($bookType == "vintage") {
$bookObject = new VintageBookOffer();
}
else if($bookType == "newbook") {
$bookObject = new NewBookOffer();
}
return $bookObject;
}
}$bookType1 = "vintage";
$bookType2 = "newbook";$offerGenerator = new OfferGenerator();
$bookOffer1 = $offerGenerator->generateOffer($bookType1);
$bookOffer2 = $offerGenerator->generateOffer($bookType2);echo "You chose book type " . $bookType1 . ". Your coupon code is " . $bookOffer1->generateDiscount() . ", and your discount is " . $bookOffer1->generateCoupon();
echo "You chose book type " . $bookType2 . ". Your coupon code is " . $bookOffer2->generateDiscount() . ", and your discount is " . $bookOffer2->generateCoupon();
?>
Это выглядит правильно? Я верю, что это так. Но любая обратная связь от сообщества будет приветствоваться. Единственная причина, по которой я думаю, что она может быть неправильной, заключается в том, что она не использует подсказки типов, что часто встречается в шаблоне стратегии.
Задача ещё не решена.
Других решений пока нет …