介绍
整体概述
顾名思义,工厂模式就像一个工厂, 提供了一种统一创建(生产)对象的接口。用户提供需要创建的对象的名称,工厂接口根据名称选择相应的子类来构造相应的对象
优缺点
- 优点
- 调用者想要创建对象,只需要知道其名称就行了
- 扩展性好,如果想增加一个产品,只需要添加一个工厂类就行了
- 实现了产品实现和调用者的解耦合,调用者只需要知道接口就行了
缺点
说明
- 当我们明确地计划,在不同条件下创建不同实例的时候
- 当对象比较复杂的时候,比较适合使用工厂模式
- 举例
整体概述
需要写的东西有
- 实体类的接口
- 若干实体类
-
代码示例
假设我们的工厂提供三种不同的网络协议供选择
实体类的接口(当然,不一定要用interface,可以是抽象类、父类都行,主要是这么个概念)
<?phpinterface WebProtocol{public function say();}
若干实体类 ```php <?php class HttpProtocol implements WebProtocol {
public function say(){echo "This is Http\n";}
}
class FtpProtocol implements WebProtocol { public function say(){ echo “Ftp is This\n”; } }
- 一个工厂类```php<?phpclass WebProtocolFactory{public function getProtocol($name){if ($name == 'ftp'){return new FtpProtocol;}else if ($name == 'http'){return new HttpProtocol;}else {return false;}}}
- 调用过程 ```php <?php $factory = new WebProtocolFactory;
$protocol1 = $factory->getProtocol(‘ftp’); $protocol1->say();
//Output:Ftp is This ```
