工厂模式:
是一种类,建立了一个工厂来根据所需来创建对象,这种方式在多态性编程中是很重要的,允许动态替换类,修改配置等。
简单工厂模式:
通过静态方法创建对象。可以理解成,只负责生产同一等级结构中的任何一个产品,但是不能新增产品。
简单工厂模式例子:
//工厂接口
interface UserInterface{
function getUserName();
function getName();
function getJob();
}
//实现工厂接口
class User implements UserInterface{
private $UserName;
private $Name;
private $Job;
public function __construct($UserName,$Name,$Job){
$this->UserName=$UserName;
$this->Name=$Name;
$this->Job=$Job;
}
function getUserName(){
return $this->UserName;
}
function getName(){
return $this->Name;
}
function getJob(){
return $this->Job;
}
}
//静态调用对象返回实例化
class UserFactory{
static public function getUser($list){
return new User($list['UserName'], $list['Name'], $list['Job']);
}
}
$list=array('UserName'=>'username','Name'=>'name','Job'=>'Job');
$User=UserFactory::getUser($list);
echo $User->getUserName();
工厂方法模式:
去掉了简单工厂模式中方法的静态属性,使其可以被子类集成,定义一个创建对象的接口,让子类去决定实例化哪个类。用来生产同一等级结构中的固定产品,但是支持增加产品。
工厂方法模式:
interface UserInterface{ //定义工厂接口
function getUserName();
function getName();
function getJob();
}
interface CreateUser{
function Create($list);
}
class User implements UserInterface{
private $UserName;
private $Name;
private $Job;
public function __construct($UserName,$Name,$Job){
$this->UserName=$UserName;
$this->Name=$Name;
$this->Job=$Job;
}
function getUserName(){
return $this->UserName;
}
function getName(){
return $this->Name;
}
function getJob(){
return $this->Job;
}
}
class UserFactory{
private $User;
public function __construct($list){
$this->User=new User($list['UserName'],$list['Name'],$list['Job']);
}
public function getUser(){
return $this->User;
}
}
class MainFactory implements CreateUser{
public function Create($list){
return new UserFactory($list);
}
}
class clientUser{
static public function getclient($list){
$Main=new MainFactory;
$User_t=$Main->Create($list);
echo $User_t->getUser()->getUserName();
}
}
$list=array('UserName'=>'aa','Name'=>'cc','Job'=>'dd');
$get_Client=clientUser::getclient($list);
抽象工厂模式:
提供一个创建一系列相关或者相互依赖的对象的接口。可以理解成,用来生产不用类型的全部产品,但是不能增加新品,支持增加新的类型。
抽象工厂模式例子:
//定义工厂基本接口
interface UserInterface{
function getUserName();
function getGender();
function getJob();
}
/**
* 将User对象创建抽象成一个接口 UserCreate
* createOpen内向创建
* createInfo外向创建
*/
interface UserCreate{
function createOpen($list);
function createInfo($list);
}
//对象实现工厂基本接口
class User implements UserInterface{
private $UserName;
private $Gender;
private $Job;
public function __construct($UserName,$Gender,$Job){
$this->UserName=$UserName;
$this->Gender=$Gender;
$this->Job=$Job;
}
function getUserName(){
return $this->UserName;
}
function getGender(){
return $this->Gender;
}
function getJob(){
return $this->Job;
}
}
//工厂:User对象实例化保存到User属性里面
class UserFactory{
private $User;
public function __construct($list){
$this->User=new User($list['UserName'],$list['Gender'],$list['Job']);
}
public function getUser(){
return $this->User;
}
}
//实现对象抽象接口
class MainFactory implements UserCreate{
function createOpen($list){
return new UserFactory($list);
}
function createInfo($list){
return new UserFactory($list);
}
}
class clientUser{ //客户端调用
static public function getclientUer($list){
$main=new MainFactory;
$Users=$main->createOpen($list);
echo $Users->getUser()->getUserName();
}
}
/**
* 定义数组必须有键值对并且键的值必须有
* UserName,Gender,Job这三项。
*/
$list=array(
'UserName'=>"aaaa",
'Gender'=>"dddd",
'Job'=>"eeee"
);
/**
* 实例化clientUser类
* 调用静态方法
*/
$new=new clientUser();
$new->getclientUer($list);
//$new=clientUser::getclientUser($list);也可以这样写