Decorator
8/8/25Less than 1 minute
Description
To dynamically add new functionality to class instances.
- Thêm chức năng mới mà không làm ảnh hưởng đến class.
- Tham chiếu đến property, method đã được implement/
Example
Add function for the booking room.
interface Room {
public function price();
}
class BookingRoom implements Room {
public function price() {
return 50;
}
}
- Cần thêm các tiện ích vào BookingRoom.
- Sẽ tính toán lại price theo tiện ích.
- Nhưng không edit lại code của BookingRoom.
Wifi
Tạo 1 decorator để add new funciton
class RoomDecorator implements Room {
protected $room;
public function __construct(Room $room) {
$this->room = $room;
}
public function price()
{
return $this->room->price();
}
}
Thêm tiện ích wifi
class WifiRoom extends RoomDecorator {
public function price()
{
return parent::price() + 10;
}
}
class ConditioningRoom extends RoomDecorator {
public function price()
{
return parent::price() + 5;
}
}
Usage
// Room normal
$room = new BookingRoom();
// $room->price() --- 50
$room = new WifiRoom($room);
// $room->price() --- 60
$room = new ConditioningRoom($room);
// $room->price() --- 65