设计模式之策略模式
设计模式之策略模式
策略模式针对一组算法,将每一个算法封装到具有共同接口的独立的类中, 此模式让算法的变化独立于使用算法的客户。从而让程序结构更灵活,具有更好的扩展性和维护性
在实际场景中,通俗的说就是提供多个策略的模式,用户在不同的情况下可以选择不同的策略
abstract Man
{
public function run();
public function gongfu();//不一定每个人都会功夫
}
class zhangsan extends Man
{
public function run()
{
echo '走走走 走啊走';
}
public function gongfu()
{
echo '快使用双杰轮';
}
}
class lisi extends Man
{
public function run()
{
echo '走走走 走啊走';
}
public function gongfu(){
}
}
策略模式
header('content-type:text/html;charset=utf-8');
interface IGongFuBehavior
{
public function gongfu();
}
class HideBody implements IGongFuBehavior
{
public function gongfu()
{
echo '你看不见我';
}
}
class QingGong implements IGongFuBehavior
{
public function gongfu()
{
echo '飞檐走壁';
}
}
class Person
{
private $_gfBehavior;
public function addGongFu(IGongFuBehavior $gf)
{
$this->_gfBehavior = $gf;
}
public function skill()
{
$this->_gfBehavior->gongfu();
}
}
class zhangsan extends Person
{
public function run()
{
echo '走走走 走啊走';
}
}
class lisi extends Person
{
public function run()
{
echo '走走走 走啊走';
}
}
$ls = new lisi();
$ls->addGongFu(new HideBody());
$ls->skill();
总结
- 找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起;
- 针对接口编程,不针对实现编程;
- 多用组合,少用继承;