说明
这个也是工厂模式, 我们看过简单工厂, 简单工厂会让该工厂的职责越来越重。这里有个抽象工厂, 为了解决由于工厂方法模式中每个工厂只创建一类实例对象, 导致工厂类过多。
我们可以将具体类组成一个类别, 由一个工厂来产生, 这就是抽象工厂
- 定义
提供一个创建一系列相关或相互依赖对象的接口, 而无需指定他们具体的类
- 应用场景
程序需要处理不同系统的相关产品, 但是客户不需要依赖于这些产品的具体类, 可以使用抽象工厂
示例
- 利用工厂模式 设计多个数据库操作,连接、命令发送等等 例如
mysql
oracle
...
<?php /** * Created by 憧憬. */ /** * 定义连接约束 * Interface IConnection */ interface IConnection { public function connect(); } /** * 定义命令约束 * Interface ICommand */ interface ICommand { public function command(); } /** * mysql连接实现 * Class MysqlConnect */ class MysqlConnect implements IConnection { public function connect() { echo 'mysql connect'; } } /** * mysql命令发送 * Class MysqlCommand */ class MysqlCommand implements ICommand { public function command() { echo 'mysql command'; } } /** * 抽象工厂约束 * Interface IDataBase */ interface IDataBase { public function getConnect(); public function getCommand(); } /** * mysql工厂实现 * Class MysqlServer */ class MysqlServer implements IDataBase { public function getConnect() { return new MysqlConnect(); } public function getCommand() { return new MysqlCommand(); } } $mysqlServer = new MysqlServer(); $mysqlServer->getConnect()->connect(); $mysqlServer->getCommand()->command();
如果我还需要oracle
操作我直接实现就ok
这里如果使用简单工厂 就需要修改整体结构,使用抽象工厂 只需要提供各个实现即可 最后实现工厂即可,当然抽象工厂模式同样具有工厂模式对结构要求高的缺点,整体结构的扩展或精简将变得更加的烦杂,所以使用抽象工厂模式时,对等级结构的划分是非常重要的。