美文网首页PHP经验分享PHP开发
PHP的设计模式-装饰者模式

PHP的设计模式-装饰者模式

作者: PHP的艺术编程 | 来源:发表于2019-10-16 15:13 被阅读0次

    装饰者模式

    装饰者模式

    装饰者模式类似蛋糕,有草莓味、奶酪等种类,但是它们的核心都是蛋糕。

    不断地将对象添加装饰的设计模式叫做 装饰者模式(Decorator)

    注意:
        装饰 边框与被装饰物的一致性
    

    PHP代码实现

    1571209934450.jpg
    <?php
    
    interface Decorator
    {
        public function display();
    }
    
    /**
    * 核心类
    */
    class XiaoFang implements Decorator
    {
        private $name;
        
        public function __construct($name)
        {
            $this->name = $name;
        }
    
        public function display()
        {
            echo "我是" . $this->name . "我要出门" . PHP_EOL;
        }
    }
    
    /**
    * 装饰边框类
    */
    class Finery implements Decorator
    {
        private $componment;
    
        public function __construct(Decorator $componment)
        {
            $this->componment = $componment;
        }
    
        public function display()
        {
            $this->componment->display();
        }
    }
    
    /**
    * 装饰物类1
    */
    class Shoes extends Finery
    {
        public function display()
        {
            echo "穿上鞋子" . PHP_EOL;
            parent::display();
        }
    }
    
    /**
    * 装饰物类2
    */
    class Fire extends Finery
    {
        public function display()
        {
            echo "出门前整理头发" . PHP_EOL;
            parent::display();
            echo "出门后整理头发" . PHP_EOL;   
        }
    }
    
    $xiaofeng = new XiaoFang("小方");
    $shoes = new Shoes($xiaofeng);
    $fire = new Fire($shoes);
    $fire->display();
    

    总结

    在装饰着模式中,装饰类(小方)和被装饰物(出门操作)具有一致性。在程序中,装饰物Finery类(以及它的子类)与表示被装饰物的XiaoFang类有相同的接口。可以随时增加新的打扮类,只该类继承Finery类(装饰类)并调用父类的同名方法。

    该模式中用到了委托,它使类之间形成了弱关系。不改变框架代码的前提,就可以生成一个与其他对象具有不用关系的新对象。

    缺点:导致程序中增加许多功能类似的很小的类。

    相关文章

      网友评论

        本文标题:PHP的设计模式-装饰者模式

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