• php设计模式-工厂模式


    工厂模式

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

             简单工厂模式

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

    简单工厂模式例子:

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




  • 相关阅读:
    移动端布局方案汇总&&原理解析
    Javascript运行机制
    git 使用
    async await详解
    vue使用axios调用豆瓣API跨域问题
    hash和history的区别
    http状态码
    XSS 和 CSRF简述及预防措施
    【pytorch】pytorch基础学习
    [源码解读] ResNet源码解读(pytorch)
  • 原文地址:https://www.cnblogs.com/sztx/p/9499758.html
Copyright © 2020-2023  润新知