策略模式就是将特定的行为封装成一个类,来适应特定的用户某些特定的情况。例如:在面向过程的开发中总是使用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.使用策略模式完成依赖倒置,属于解耦的过程;