zoukankan      html  css  js  c++  java
  • php设计模式-装饰器模式

    使用情景:假如一本书的上市,要经过创作,编辑加上摘要,SEO人员给书加上SEO关键词这么一个有序的过程,通过继承的方式的确可以做到有序地对文章装饰不同的东西,但是这样的纵深继承结构不太科学,所以从线上结构转换成一个父类多个子类的两层结构。

    // 原始文章类
    class Article
    {
        protected $_content;
        protected $_parent;
    
        public function __construct($content)
        {
            $this->_content = $content;
        }
    
        public function decorate()
        {
            return $this->_content;
        }   
    }
    
    // 编辑给文章装饰上摘要的类
    class BianAticle extends Article
    {
    
        public function __construct($parent)
        {
            $this->_parent = $parent;
            $this->decorate();
        }
    
        public function decorate()
        {
            return $this->_parent->decorate() . '<br>摘要:ABCD';
        }
    }
    
    // SEO人员给文章加上SEO
    class SEOArticle extends Article
    {
        public function __construct($parent)
        {
            $this->_parent = $parent;
        }
    
        public function decorate()
        {
            return $this->_parent->decorate() . '<br>SEO:EFGH';
        }
    }
    
    $bian = new BianAticle(new SEOArticle(new Article('文章A')));
    echo $bian->decorate();
    echo '<br>';
    echo '--------------------------------------------------';
    echo '<br>';
    $seo = new SEOArticle(new BianAticle(new Article('文章B')));
    echo $seo->decorate();
    

      结果:

    文章A
    SEO:EFGH
    摘要:ABCD
    --------------------------------------------------
    文章B
    摘要:ABCD
    SEO:EFGH
    

      

  • 相关阅读:
    Java之IO流
    Servlet中Session的用法
    Servlet中Cookie的用法
    HTML的表单元素和input元素
    Servlet第一个实例之用户登录网址
    Servlet的生命周期和三种实现方式
    写一下近期的计划(工作)
    RxJava的基础知识
    actionbar、toolbar、menu之间的关系
    ButterKnife的基础知识
  • 原文地址:https://www.cnblogs.com/xiangdongsheng/p/13369509.html
Copyright © 2011-2022 走看看