php 工厂模式

  1. 基本工厂
     1 class User {   
     2     private $username;   
     3     public function __construct($username) {   
     4         $this->username = $username;   
     5     }   
     6       
     7     public function getUser() {   
     8         return $this->username;   
     9     }   
    10 }  
    11   
    12 class userFactory {   
    13     static public function createUser() {   
    14         return new User('Jack');   
    15     }   
    16 }  
    17   
    18 $user = userFactory::createUser();echo $user->getUser();
  2. 简单工厂模式
    interface userProperties {  
        function getUsername();  
        function getGender();  
        function getJob();  
    }  
    class User implements userProperties{  
        private $username;  
        private $gender;  
        private $job;  
        public function __construct($username, $gender, $job) {  
            $this->username = $username;  
            $this->gender = $gender;  
            $this->job = $job;  
        }  
      
        public function getUsername() {  
            return $this->username;  
        }  
      
        public function getGender() {  
            return $this->gender;  
        }  
      
        public function getJob() {  
            return $this->job;  
        }  
    }  
      
    class userFactory {  
        static public function createUser($properties = []) {  
            return new User($properties['username'], $properties['gender'], $properties['job']);  
        }  
    }  
      
    $employers = [  
        ['username' => 'Jack', 'gender' => 'male', 'job' => 'coder'],  
        ['username' => 'Marry', 'gender' => 'female', 'job' => 'designer'],  
        ];  
    $user = userFactory::createUser($employers[0]);  
    echo $user->getUsername();  
  3. 抽象工厂模式
    interface userProperties {  
        function getUsername();  
        function getGender();  
        function getJob();  
    }  
      
    interface createUser { //将对象的创建抽象成一个接口  
        function createOpen($properties);//内向创建  
        function createIntro($properties);//外向创建  
    }  
      
    class User implements userProperties{  
        private $username;  
        private $gender;  
        private $job;  
        public function __construct($username, $gender, $job) {  
            $this->username = $username;  
            $this->gender = $gender;  
            $this->job = $job;  
        }  
      
        public function getUsername() {  
            return $this->username;  
        }  
      
        public function getGender() {  
            return $this->gender;  
        }  
      
        public function getJob() {  
            return $this->job;  
        }  
    }  
      
    class userFactory {  
        private $user;  
        public function __construct($properties = []) {  
            $this->user =  new User($properties['username'], $properties['gender'], $properties['job']);  
        }  
      
        public function getUser() {  
            return $this->user;  
        }  
    }  
      
    class FactoryMan implements createUser {  
        function createOpen($properties) {  
            return new userFactory($properties);   
        }  
      
        function createIntro($properties) {  
            return new userFactory($properties);   
        }  
    }   
      
    class FactoryWoman implements createUser {  
        function createOpen($properties) {  
            return new userFactory($properties);  
        }  
      
        function createIntro($properties) {  
            return new userFactory($properties);  
        }  
    }  
      
    class clientUser {  
        static public function getClient($properties) {  
            $fac = new FactoryMan;  
            $man = $fac->createOpen($properties);  
            return $man->getUser()->getUsername();  
        }  
    }  
      
    $employers = [  
        ['username' => 'Jack', 'gender' => 'male', 'job' => 'coder'],  
        ['username' => 'Marry', 'gender' => 'female', 'job' => 'designer'],  
        ];  
    $user  = clientUser::getClient($employers[0]);
    $user1 = clientUser::getClient($employers[1]);
    $user2 = clientUser::getClient($employers[0]);
    $user3 = clientUser::getClient($employers[1]);
    var_dump($user,$user1,$user2,$user3);
原文地址:https://www.cnblogs.com/pfdltutu/p/9018749.html