多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。
一个抽象工厂类,可以派生出多个具体工厂类。
每个具体工厂类可以创建多个具体产品类的实例。
<?php
//面向接口编程,这是一个接口,抽象类,用于规范业务层子类实现
abstract class AUser {
abstract public function selectUser(); //查找
abstract public function updateUser(); //修改
abstract public function deleteUser(); //删除
abstract public function addUser(); //新增
}
?>
<?php
//这是一个业务层,实现接口即可
class UserAction extends AUser {
public function selectUser() {
return '查找用户';
}
public function updateUser() {
return '修改用户';
}
public function deleteUser() {
return '删除用户';
}
public function addUser() {
return '新增用户';
}
}
?>
<?php
//工厂,用来生产各个产品的业务层对象
//每个对象,可以使用之前学过的单例模式,让他在整个流程中只保持一个实例
class Factory {
static public function getUser() {
return new UserAction();
}
static public function getArticle() {
//return new ArticleAction();
}
}
?>
<?php
//用于客户端直接调用的类
class User {
private $_obj;
public function __construct() {
$this->_obj = Factory::getUser();
}
public function selectUser() {
return $this->_obj->selectUser();
}
public function updateUser() {
return $this->_obj->updateUser();
}
public function deleteUser() {
return $this->_obj->deleteUser();
}
public function addUser() {
return $this->_obj->addUser();
}
}
?>
$_user = new User();
echo $_user->selectUser();
echo $_user->addUser();