说明
这个也是工厂模式, 我们看过简单工厂, 简单工厂会让该工厂的职责越来越重。这里有个抽象工厂, 为了解决由于工厂方法模式中每个工厂只创建一类实例对象, 导致工厂类过多。
我们可以将具体类组成一个类别, 由一个工厂来产生, 这就是抽象工厂
- 定义
提供一个创建一系列相关或相互依赖对象的接口, 而无需指定他们具体的类
- 应用场景
程序需要处理不同系统的相关产品, 但是客户不需要依赖于这些产品的具体类, 可以使用抽象工厂
示例
- 利用工厂模式 设计多个数据库操作,连接、命令发送等等 例如
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
这里如果使用简单工厂 就需要修改整体结构,使用抽象工厂 只需要提供各个实现即可 最后实现工厂即可,当然抽象工厂模式同样具有工厂模式对结构要求高的缺点,整体结构的扩展或精简将变得更加的烦杂,所以使用抽象工厂模式时,对等级结构的划分是非常重要的。
本文为作者原创,手码不易,允许转载,转载后请以链接形式说明文章出处。