首先来一个工厂模式的例子
class factoryClass{
/**
*
* @return className_Abstract //注意这里最好写上返回值类型,在zend Studio里边可以自动提示一些接口,
*/
public static function factory($adapter, $config = array())
{
if(...)
{
return new className1();
}
else
{
return new className2();
}
......
}
}
再来一个策略模式:
class strategyClass{
private $_pen;
public function load($config)
{
$className=$config['classname'];
$this->_object=new $className();
}
public function write($msg)
{
$this->_pen->write($msg);
}
.....
}
我们看到,两种模式有明显区别,工厂模式直接返回给调用方一个不同的对象,而策略模式没有返回对象而是利用一个类似代理类的概念实现的统一的功能,这也说明:工厂模式适合同一类对象但是功能差别可能比较多的类,策略模式适合那些同类对象但是功能基本差不多的类