策略模式就是将特定的行为封装成一个类,来适应特定的用户某些特定的情况。例如:在面向过程的开发中总是使用if...else.....这种属于硬编码的形式,当有些条件在修改的时候我们还要去调整if else的程序 。现在就来搞一搞策略模式。
<?php interface UserStrategy { function showad(); function showcat(); } class Man implements UserStrategy { function showad() { echo 'macbook'; } function showcat() { echo 'mac_dev'; } } class Woman implements UserStrategy { function showad() { echo 'woman_ad'; } function showcat() { echo 'woman_cat'; } } class pick { private $_act; function pickecho() { $this->_act->showcat(); $this->_act->showad(); } function setact($Strategy) { $this->_act = $Strategy; } } $pickclass = new pick(); //针对woman $pickclass->setact(new Woman()); $pickclass->pickecho(); echo "<br/>"; //针对man $pickclass->setact(new Man()); $pickclass->pickecho();
总结:
1.在代码中需要变化的地方,把它们独立出来,不要和那些不需要变化的代码混在一起;
2.针对接口编程,不针对实现编程;
3.多用组合,少用继承;
4.使用策略模式完成依赖倒置,属于解耦的过程;