抽象工厂提供创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类。

下面是数据库访问程序,用抽象工厂来实现。

抽象工厂接口(应该包含所有产品的创建的抽象方法):

申明抽象工厂接口:

interface AFactory {

public function createUser();
public function createDepartment();

}

抽象工厂的具体实现工厂:

class MysqlFactory implements AFactory {

public function createUser()
{
    return new MysqlUser();
}

public function createDepartment()
{
    return new MysqlDepartment();
}
}

class SqliteFactory implements AFactory {

public function createUser()
{
    return new SqliteUser();
}

public function createDepartment()
{
    return new SqliteDepartment();
}
}

申明数据库表访问对象接口:

interface AUser {

public function insert();

public function find();
}

interface ADepartment {

public function insert();

public function find();
}

数据库表访问对象具体实现:

class MysqlUser implements AUser
{
public function insert()
{
    echo 'insert mysql one';
}

public function find()
{
    echo 'find mysql one';
}
}

class SqliteUser implements AUser
{
public function insert()
{
    echo 'insert sqlite one';
}

public function find()
{
    echo 'find sqlite one';
}
}

class MysqlDepartment implements ADepartment
{
public function insert()
{
    echo 'insert mysql one';
}

public function find()
{
    echo 'find mysql one';
}
}

class SqliteDepartment implements ADepartment
{
public function insert()
{
    echo 'insert sqlite one';
}

public function find()
{
    echo 'find sqlite one';
}
}

客户端代码:

$factory = new MysqlFactory();
$user = $factory->createUser();
$user->insert();
$user->find();

结果:

insert mysql onefind mysql one

User跟Department是两个抽象产品,MysqlUser跟SqliteUser是两个产品的具体实现。MysqlFactory跟SqliteFactory是抽象工厂的具体实现。