久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

PHP設(shè)計模式之工廠模式詳解

這篇文章主要為大家詳細(xì)介紹了PHP設(shè)計模式之工廠模式,具有一定的參考價值,感興趣的小伙伴們可以參考一下

在開發(fā)大型系統(tǒng)時,往往會出現(xiàn)這樣一種情況:

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

這時,工廠模式的作用性就體現(xiàn)出來了。

工廠模式    

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

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

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

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

?>

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

簡單工廠模式,通過靜態(tài)方法創(chuàng)建對象??梢岳斫獬?,只負(fù)責(zé)生產(chǎn)同一等級結(jié)構(gòu)中的任何一個產(chǎn)品,但是不能新增產(chǎn)品。

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

工廠方法模式,去掉了簡單工廠模式中方法的靜態(tài)屬性,使其可以被子類集成,定義一個創(chuàng)建對象的接口,讓子類去決定實例化哪個類??梢岳斫獬?,用來生產(chǎn)同一等級結(jié)構(gòu)中的固定產(chǎn)品,但是支持增加產(chǎn)品。

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

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

<?php

/** 
 * 抽象工廠模式 
 * */ 
 
interface userProperties { 
 function getUsername(); 
 function getGender(); 
 function getJob(); 
} 
 
interface createUser { //將對象的創(chuàng)建抽象成一個接口 
 function createOpen($properties);//內(nèi)向創(chuàng)建 
 function createIntro($properties);//外向創(chuàng)建 
} 
 
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]); 
?>

如有錯誤,請指正。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持。

【網(wǎng)站聲明】本站除付費源碼經(jīng)過測試外,其他素材未做測試,不保證完整性,網(wǎng)站上部分源碼僅限學(xué)習(xí)交流,請勿用于商業(yè)用途。如損害你的權(quán)益請聯(lián)系客服QQ:2655101040 給予處理,謝謝支持。

相關(guān)文檔推薦

這篇文章主要介紹了PHP有序表查找之插值查找算法,簡單分析了插值查找算法的概念、原理并結(jié)合實例形式分析了php實現(xiàn)針對有序表插值查找的相關(guān)操作技巧,需要的朋友可以參考下
下面小編就為大家分享一篇ThinkPHP整合datatables實現(xiàn)服務(wù)端分頁的示例代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
下面小編就為大家分享一篇PHP實現(xiàn)APP微信支付的實例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
這篇文章主要介紹了PHP實現(xiàn)的多維數(shù)組排序算法,結(jié)合實例形式對比分析了php針對多維數(shù)組及帶有鍵名的多維數(shù)組進(jìn)行排序相關(guān)操作技巧與注意事項,需要的朋友可以參考下
這篇文章主要為大家詳細(xì)介紹了php結(jié)合ajaxuploadfile實現(xiàn)無刷新文件上傳功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
本篇文章給大家詳細(xì)介紹了PHP開發(fā)接口使用RSA進(jìn)行加密解密方法,對此有興趣的朋友可以學(xué)習(xí)下。
主站蜘蛛池模板: 福利久久| 国产精品亚洲综合 | 亚洲三区视频 | 亚洲高清在线观看 | 国产一区二区在线免费播放 | 亚洲国产成人精品女人久久久 | 国产99视频精品免费播放照片 | 欧美美女被c | 成人乱人乱一区二区三区软件 | 久久亚洲一区二区三区四区 | 亚洲欧美中文日韩在线v日本 | 免费毛片在线 | 福利色导航 | 国产精品久久久久久婷婷天堂 | 国产精品区二区三区日本 | 欧美成人a∨高清免费观看 欧美日韩中 | 精品自拍视频 | 日韩中文字幕在线观看 | 日韩中文字幕在线观看视频 | 综合精品久久久 | 国产福利在线小视频 | 亚洲一区二区久久 | 国产精品国产成人国产三级 | 超碰免费在线观看 | 亚洲综合大片69999 | 日本在线观看视频 | 日韩国产黄色片 | 久久久久久综合 | 99综合网| 一级毛片观看 | 色偷偷888欧美精品久久久 | 日韩欧美大片在线观看 | 亚洲免费视频在线观看 | 久久久免费观看视频 | 成人在线免费观看视频 | www日本高清视频 | 秋霞影院一区二区 | 国产精品区二区三区日本 | 91视视频在线观看入口直接观看 | 一区二区亚洲 | 99亚洲精品 |