美文网首页
装饰模式

装饰模式

作者: 散装咖啡 | 来源:发表于2017-05-29 12:33 被阅读9次
    /**
            decorator模式
            动态的给一个对象添加一些额外的职责,就扩展功能而言比生成子类方式更
    为灵活
    */
        header("Content-type:text/html;charset=utf-8");
        abstract class MessageBoardHandler
        {
            public function __construct(){}
            abstract public function filter($msg);
        }
        
        class MessageBoard extends MessageBoardHandler
        {
            public  function filter($msg)
            {
                return"处理留言板上的内容|".$msg;
            }
        }
    
        $obj=new MessageBoard();
        echo$obj->filter("一定要学好装饰模式<br/>");
    
        // --- 以下是使用装饰模式 ----
        class MessageBoardDecorator extends MessageBoardHandler
        {
            private $_handler = null;
            public  function __construct($handler)
            {
                parent::__construct();
                $this->_handler = $handler;
            }
            
            public function filter($msg)
            {
                return$this->_handler->filter($msg);
            }
        }
    
        // 过滤 html
        class HtmlFilter extends MessageBoardDecorator
        {
            public  function __construct($handler)
            {
                parent::__construct($handler);
            }
            
            public  function filter($msg)
            {
                return"过滤掉 HTML 标签|".parent::filter($msg);; // 过滤掉 HTML 标签的处理 这时只是加个文字 没有进行处理
            }
        }
        
        // 过滤敏感词
        class SensitiveFilter extends MessageBoardDecorator
        {
            public  function __construct($handler)
            {
                parent::__construct($handler);
            }
            
            public  function filter($msg)
            {
                return "过滤掉敏感词|" . parent::filter($msg); // 过滤掉敏感词的处理 这时只是加个文字 没有进行处理
            }
        }
        
        $obj = new HtmlFilter(new SensitiveFilter(new MessageBoard()));
        echo $obj->filter("一定要学好装饰模式!<br/>");
    

    参考文章 https://wenku.baidu.com/view/b4c78b4702768e9951e738fb.html

    相关文章

      网友评论

          本文标题:装饰模式

          本文链接:https://www.haomeiwen.com/subject/uivkfxtx.html