博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
php设计模式-工厂模式
阅读量:5967 次
发布时间:2019-06-19

本文共 3914 字,大约阅读时间需要 13 分钟。

工厂模式

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

         简单工厂模式

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

简单工厂模式例子:

 

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

转载于:https://www.cnblogs.com/sztx/p/9499758.html

你可能感兴趣的文章
Javascript获取日期和星期
查看>>
xml字符串转xml对象,xml对象转json对象
查看>>
AttributeError: 'NoneType' object has no attribute 'split' 报错处理
查看>>
PYTHON——多线程:同步条件(Event)
查看>>
ThinkCMF变量输出+使用函数
查看>>
0505.Net基础班第十三天(面向对象多态)
查看>>
Oracle 分页查询
查看>>
微信开发之模板消息
查看>>
[python机器学习及实践(2)]Sklearn实现朴素贝叶斯
查看>>
SQL Server不存在或拒绝访问故障的排除
查看>>
java多线程(二)——锁机制synchronized(同步方法)
查看>>
(原创)在service中定时执行网络操作的几点说明
查看>>
[Javascript]XMLHttpRequest对象实现下载进度条
查看>>
UVA-572-搜索基础题
查看>>
iBeacon技术
查看>>
mac环境下配置nginx
查看>>
const与volatile
查看>>
电脑出现 flash update failed 解决方法
查看>>
【matlab】matalb生成dll给Cpp用
查看>>
《线性代数习题集》 Chapter 1_Determinants_Sec.1.Second-and Third-Order Determinants
查看>>