工厂模式:提供某个对象的心的实例的一个接口,同时使调用代码避免确定实际实例化基类的步骤。
/** * 工厂模式 */ class CDFactory { public static function create($type) { $class = strtolower($type)."CD"; return new $class; } }
/** * 基本CD类 */ class standardCD { public function addSongs($songs) { # code... } } /** * 增强型CD类 */ class enhancedCD { public function __construct() { $this->tracks[] = 'DATA TRACK'; } public function addSongs($songs) { # code... } }
需要新的新建一个类即可,工厂模式完全不用动,即使功能需求有改变只需要改变对应的类就可以,这里和委托模式区别。
/** * 使用方法 */ $type = 'standard'; $cd = CDFactory::create($type);// new standerdCD() $cd->setBand($band); $cd->setTitle($tltle);