抽象工厂
提供创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类。
下面是数据库访问程序,用抽象工厂来实现。
抽象工厂接口(应该包含所有产品的创建的抽象方法):
申明抽象工厂接口:
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是抽象工厂的具体实现。