基本步骤:
1、Api: 定义客户所需要的功能接口
2、Impl: 具体实现Api的实现类,可能会有多个
3、Factory: 工厂,选择合适的实现类来创建Api接口对象
4、Client: 客户端,通过Factory 来获取Api接口对象,然后面向Api接口编程
简单工厂的调用顺序示意图:
简单工厂的命名建议:
类命名建议为“模块名称+Factory”,比如,用户模块的工厂就称为UserFactory
方法名称通常为“get+接口名称”或者是“create+接口名称”。比如用户接口名称为UserEbi,那么方法名称通常为getUserEbi或者createUserEbi。
简单工厂方法的内部主要实现的功能是“选择合适的实现类”,选择条件或者是参数的来源通常为一下集中:
来源于客户端,由Client来传入参数
来源于配置文件,从配置文件获取用于判断的值
来源于程序运行期的某个值,比如从缓存中获取某个运行期的值
工厂模式php实例:
<?php
/***
公司接口类*
Interface Company
*/
interface Company{
public function add($username);//添加员工
public function del($username);//删除员工}
}
?>
<?php
/**
* A 公司
* Class Company_A
*/
class Company_A implements Company{
public function add($username){
echo $username .' is add into A</br>';
}
public function del($username){
echo $username .' is del function from A</br>';
}
}
?>
<?php
/**
* B 公司
* Class Company_B
*/class Company_B implements Company{
public function add($username){
echo $username .' is add into B</br>';
}
public function del($username){
echo $username .' is del function from B</br>';
}
}
?>
<?php
class Factory{
public static function create_obj($type){
switch($type){
case 'A':
$obj = new Company_A();
break;
case 'B':
$obj = new Company_B();
break;
}
return $obj;
}
}
$company = Factory::create_obj("A");
$company->add('user1');
$type = 'B';
$company = Factory::create_obj($type);
$company->del('user2');
结果:
user1 is add into A
user2 is del function from B