1. 程式人生 > 實用技巧 >[PHP] 裝飾器模式-結構型設計模式

[PHP] 裝飾器模式-結構型設計模式

動態地為類的例項新增功能,一層一層的套功能

先定義好介面

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);