zoukankan      html  css  js  c++  java
  • [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);

  • 相关阅读:
    4-17 文字图片绘制
    4-16 矩形圆形任意多边形绘制
    4-15 线段绘制
    4-14 图像特效小结
    4-13 油画特效
    4-12 颜色映射
    4-11 浮雕效果
    Linux文本截取命令cut​笔记
    45张令程序员泪流满面的趣图
    45张令程序员泪流满面的趣图
  • 原文地址:https://www.cnblogs.com/taoshihan/p/13836582.html
Copyright © 2011-2022 走看看