工厂模式:
是一种类,建立了一个工厂来根据所需来创建对象,这种方式在多态性编程中是很重要的,允许动态替换类,修改配置等。
简单工厂模式:
通过静态方法创建对象。可以理解成,只负责生产同一等级结构中的任何一个产品,但是不能新增产品。
简单工厂模式例子:
//工厂接口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);也可以这样写