国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > PHP > 正文

PHP設計模式之工廠模式詳解

2024-05-05 00:00:39
字體:
來源:轉載
供稿:網友

在開發大型系統時,往往會出現這樣一種情況:

我有一部分基礎數據,是類classA是從數據庫A讀取出來的,其他很多的功能都是基于這個基礎數據來操作的。現在呢,我想把數據從數據庫A變成從另外的數據源去獲取,這時候,要修改起來就比較麻煩,要修改其他很多類的代碼。這種設計顯然是不夠靈活的,換句話說,就是緊耦合的,那么什么是緊耦合呢?緊耦合就是指系統中某個部分的函數或類嚴重依賴于系統的其他部分中的函數或類的行為和結構。

這時,工廠模式的作用性就體現出來了。

工廠模式    

就是解決這樣的一些情況的設計方法。

工廠模式是一種類,建立了一個工廠來根據所需來創建對象,這種方式在多態性編程中是很重要的,允許動態替換類,修改配置等。

/*基本工廠模式代碼*/

<?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(); ?>

工廠模式分為:簡單工廠模式、工廠方法模式、抽象工廠模式。

簡單工廠模式,通過靜態方法創建對象。可以理解成,只負責生產同一等級結構中的任何一個產品,但是不能新增產品。

<?php/**  *簡單工廠模式  * */ 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();  ?>

工廠方法模式,去掉了簡單工廠模式中方法的靜態屬性,使其可以被子類集成,定義一個創建對象的接口,讓子類去決定實例化哪個類。可以理解成,用來生產同一等級結構中的固定產品,但是支持增加產品。

<?php/**  * 工廠方法模式  **/ 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]);  ?>

抽象工廠模式,提供一個創建一系列相關或者相互依賴的對象的接口。可以理解成,用來生產不用類型的全部產品,但是不能增加新品,支持增加新的類型。

<?php/**  * 抽象工廠模式  * */  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]); ?>

如有錯誤,請指正。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到PHP教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 三亚市| 沧州市| 南江县| 蚌埠市| 八宿县| 利辛县| 平定县| 贡嘎县| 丹东市| 建水县| 江北区| 水城县| 德格县| 嘉黎县| 湾仔区| 什邡市| 乐山市| 金湖县| 翁源县| 即墨市| 三河市| 西华县| 化隆| 随州市| 大同县| 泌阳县| 醴陵市| 朔州市| 莱西市| 尤溪县| 余干县| 明光市| 象山县| 方正县| 五大连池市| 怀安县| 怀远县| 祁门县| 微博| 连云港市| 马鞍山市|