動態地為類的實體添加功能,一層一層的套功能
先定義好介面
interface Booking{ public function getDescription(): string; }
這個就是裝飾器實作了Booking,通過建構式傳遞Booking物件進來
abstract class BookingDecorator implements Booking{ protected Booking $booking; public function __construct(Booking $booking) { $this->booking = $booking; } }
這個類直接實作Booking
class DoubleRoomBooking implements Booking { public function getDescription(): string{ return 'double room'; } }
這個類繼承了裝飾器,實作了Booking
class WiFi extends BookingDecorator{ public function getDescription(): string { return $this->booking->getDescription() . ' with wifi'; } } class ExtraBed extends BookingDecorator { public function calculatePrice(): int { return $this->booking->calculatePrice() + self::PRICE; } public function getDescription(): string { return $this->booking->getDescription() . ' with extra bed'; } }
$booking = new DoubleRoomBooking();
//繼承裝飾器的可以一層層套
$booking = new WiFi($booking);
$booking = new ExtraBed($booking);
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/178813.html
標籤:PHP
下一篇:爬蟲報錯(持續.....)
