php 装饰者模式

装饰者模式

 

现在出现这样一个场景:公司招聘人才,现在有很多继承person类的子类,如salePerson,ItPerson,sale+Itperson类等等;现在公司准备对能力不一样的人才提高工资收入。程序员恼火了,这种累有很多,我们需要一个个去修改代码,这是勤快人做的事,对于懒人还是多想想怎么解决这个鬼东西?于是装饰者模式百年诞生了,看代码如何实现这样的方式:

abstract class person{
    public $_name;
    abstract function money();
}
//被装饰者
class salePerson extends person{
    function __construct()
    {
        $this->_name = 'saler';
    }
    public function money()
    {
        return 100;
    }
}
//装饰者
class ItPerson extends person{
    public $_person;
    function __construct(Person $person)
    {
        $this->_name = 'It';
        $this->_person = $person;
    }
    public function money()
    {
        return $this->_person->money() + 100;
    }
}
$salePerson = new salePerson();

$saleItPerson = new ItPerson($salePerson);

print $saleItPerson->money();

装饰者和被装饰者必须是一样的类型,目的就是装饰者取代被装饰者。

 

类的原则就是对扩展开发,对修改关闭。虽然装饰者模式好用,但不能项目中都用装饰者模式,这是一种浪费,造成太小类太多,装饰者模式适合裱花比较多的项目当中,如餐饮等,具体在哪里使用还是靠自己经验的积累,毕竟一个项目并非只用一个模式实现,往往是多重模式相结合实现的。

posted on 2017-03-24 14:25  happy-dream  阅读(119)  评论(0)    收藏  举报