PHP設計模式-原廠模式

來源:互聯網
上載者:User

標籤:抽象工廠   代碼   open   ace   erp   地方   create   targe   end   

代碼摘抄自:http://blog.csdn.net/mysteryhaohao/article/details/51181089

使用情境:

如果很多地方調用了類Test,那麼假設某天需要把Test類的名稱修改,則意味著所有調用此類的地方都要修改

關鍵:

只要是可以根據不同的參數產生不同的類執行個體,那麼就符合原廠模式的設計思想

代碼實現:

<?php  /**  * 基本原廠模式  * */  class User {       private $username;       public function __construct($username) {           $this->username = $username;       }             public function getUser() {           return $this->username;       }   }    class userFactory {       static public function createUser() {           return new User(‘Jack‘);       }   }    $user = userFactory::createUser();echo $user->getUser();    /**  *簡單原廠模式  * */  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();    /**  * Factory 方法模式  **/  interface userProperties {      function getUsername();      function getGender();      function getJob();  }    interface createUser {      function create($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 create($properties) {          return new userFactory($properties);       }  }     class FactoryWoman implements createUser {      function create($properties) {          return new userFactory($properties);      }  }    class clientUser {      static public function getClient($properties) {          $fac = new FactoryMan;          $man = $fac->create($properties);          echo $man->getUser()->getUsername();      }  }    $employers = [      [‘username‘ => ‘Jack‘, ‘gender‘ => ‘male‘, ‘job‘ => ‘coder‘],      [‘username‘ => ‘Marry‘, ‘gender‘ => ‘female‘, ‘job‘ => ‘designer‘],      ];  $user = clientUser::getClient($employers[0]);    /**  * 抽象原廠模式  * */    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);          echo $man->getUser()->getUsername();      }  }    $employers = [      [‘username‘ => ‘Jack‘, ‘gender‘ => ‘male‘, ‘job‘ => ‘coder‘],      [‘username‘ => ‘Marry‘, ‘gender‘ => ‘female‘, ‘job‘ => ‘designer‘],      ];  $user = clientUser::getClient($employers[0]); 

 

PHP設計模式-原廠模式

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.