zoukankan      html  css  js  c++  java
  • PHP实现装饰器

    参考:https://www.cnblogs.com/onephp/p/6108940.html

    ●装饰器模式(Decorator),可以动态地添加修改类的功能

    ●一个类提供了一项功能,如果要在修改并添加额外的功能,传统的编程模式,需要写一个子类继承它,并重新实现类的方法

    ●使用装饰器模式,仅需在运行时添加一个装饰器对象即可实现,可以实现最大的灵活性

    <?php
    
    /**
     * 输出一个字符串
     * 装饰器动态添加功能
     * Class EchoText
     */
    class EchoText
    {
        protected $decorator = [];
    
        public function Index()
        {
            //调用装饰器前置操作
            $this->beforeEcho();
            echo "你好,我是装饰器。";
            //调用装饰器后置操作
            $this->afterEcho();
        }
    
        //增加装饰器
        public function addDecorator(Decorator $decorator)
        {
            $this->decorator[] = $decorator;
        }
    
        //执行装饰器前置操作 先进先出原则
        protected function beforeEcho()
        {
            foreach ($this->decorator as $decorator)
                $decorator->before();
        }
    
        //执行装饰器后置操作 先进后出原则
        protected function afterEcho()
        {
            $tmp = array_reverse($this->decorator);
            foreach ($tmp as $decorator)
                $decorator->after();
        }
    }
    
    
    /**
     * 装饰器接口
     * Class Decorator
     */
    interface Decorator
    {
        public function before();
    
        public function after();
    }
    
    /**
     * 颜色装饰器实现
     * Class ColorDecorator
     */
    class ColorDecorator implements Decorator
    {
        protected $color;
    
        public function __construct($color)
        {
            $this->color = $color;
        }
    
        public function before()
        {
            echo "<dis style='color: {$this->color}'>";
        }
    
        public function after()
        {
            echo "</div>";
        }
    }
    
    /**
     * 字体大小装饰器实现
     * Class SizeDecorator
     */
    class SizeDecorator implements Decorator
    {
        protected $size;
    
        public function __construct($size)
        {
            $this->size = $size;
        }
    
        public function before()
        {
            echo "<dis style='font-size: {$this->size}px'>";
        }
    
        public function after()
        {
            echo "</div>";
        }
    }
    
    //实例化输出类
    $echo = new EchoText();
    //增加装饰器
    $echo->addDecorator(new ColorDecorator('red'));
    //增加装饰器
    $echo->addDecorator(new SizeDecorator('22'));
    //输出
    $echo->Index();
    php-decorator
  • 相关阅读:
    「2020 新手必备 」极速入门 Retrofit + OkHttp 网络框架到实战,这一篇就够了!
    结合源码,重温 Android View 的事件处理知多少 ?
    Android 这 13 道 ContentProvider 面试题,你都会了吗?
    17 个必须掌握的 BroadcastReceiver 知识点「建议收藏」
    23 个重难点突破,带你吃透 Service 知识点「长达 1W+ 字」
    Activity 的 36 大难点,你会几个?「建议收藏」
    Python time模块
    vue项目的创建
    githunb和码云生成/添加SSH公钥
    weex打包apk步骤
  • 原文地址:https://www.cnblogs.com/yueyun00/p/10145114.html
Copyright © 2011-2022 走看看