策略模式是相对比较简单的设计模式,也是用得比较多的策略模式。形象点说,且大多数的都这样解释,方便为了很方便的添加其他的算法。其实策略模式确实这样子。它很好的符合了面向对象设计的对扩展开发,对修改闭合的原则。下面是为自己设计的一个例子进行说明!
类图
【代码】
<?php
interface Salary {
public function caculate ( );
}
class EnginerSalary implements Salary {
public function caculate ( ) {
//TODO 具体实现的过程
}
}
class DesignerSalary implements Salary {
public function caculate ( ) {
//TODO 具体实现的过程
}
}
class ManagerSalary implements Salary {
public function caculate ( ) {
//TODO 具体实现的过程
}
}
class Context {
private $_salary;
function __construct ( Salary $_salary ) {
$this->_salary = $_salary;
}
function contextCaculate ( ) {
$this->_salary->caculate ();
}
}
//example
class client {
function main ( ) {
$enginer = new EnginerSalary ();
$c = new Context ( $enginer );
$c->contextCaculate ();
$designer=new DesignerSalary();
$c=new Context($Designer);
$c->contextCaculate();
$manager=new ManagerSalary();
$c=new Context($manager);
$c->contextCaculate();
}
}
知道工厂方法的童鞋可能会发现,策略模式跟工厂方法的大框架比较像。感兴趣的童鞋可以分析分析他们。