php设计模式-工厂模式

来源:互联网 发布:网络歌曲想问问你 编辑:程序博客网 时间:2024/05/16 17:27

工厂模式

是一种类,建立了一个工厂来根据所需来创建对象,这种方式在多态性编程中是很重要的,允许动态替换类,修改配置等。

         简单工厂模式

                   通过静态方法创建对象。可以理解成,只负责生产同一等级结构中的任何一个产品,但是不能新增产品。

简单工厂模式例子:

//工厂接口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);也可以这样写