装饰者模式
现在出现这样一个场景:公司招聘人才,现在有很多继承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();
装饰者和被装饰者必须是一样的类型,目的就是装饰者取代被装饰者。
类的原则就是对扩展开发,对修改关闭。虽然装饰者模式好用,但不能项目中都用装饰者模式,这是一种浪费,造成太小类太多,装饰者模式适合裱花比较多的项目当中,如餐饮等,具体在哪里使用还是靠自己经验的积累,毕竟一个项目并非只用一个模式实现,往往是多重模式相结合实现的。