PHP经验分享PHP开发

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

2019-10-16  本文已影响0人  PHP的艺术编程

装饰者模式

装饰者模式

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

不断地将对象添加装饰的设计模式叫做 装饰者模式(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类(装饰类)并调用父类的同名方法。

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

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

上一篇下一篇

猜你喜欢

热点阅读