濮阳杆衣贸易有限公司

主頁(yè) > 知識(shí)庫(kù) > PHP設(shè)計(jì)模式之工廠模式詳解

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

熱門標(biāo)簽:襄陽(yáng)房產(chǎn)電銷機(jī)器人招商 安徽移動(dòng)外呼系統(tǒng) 清遠(yuǎn)陽(yáng)山400電話號(hào)碼如何申請(qǐng) 百度地圖標(biāo)注名編輯 百度地圖標(biāo)注飯店位置怎么 怎么在高德地圖標(biāo)注行走軌跡 個(gè)性化地圖標(biāo)注在線 施工地圖標(biāo)注怎么做 深圳400電話辦理那家好

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

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

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

工廠模式    

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

工廠模式是一種類,建立了一個(gè)工廠來(lái)根據(jù)所需來(lái)創(chuàng)建對(duì)象,這種方式在多態(tài)性編程中是很重要的,允許動(dòng)態(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(); 

?>

工廠模式分為:簡(jiǎn)單工廠模式、工廠方法模式、抽象工廠模式。

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

?php

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

工廠方法模式,去掉了簡(jiǎn)單工廠模式中方法的靜態(tài)屬性,使其可以被子類集成,定義一個(gè)創(chuàng)建對(duì)象的接口,讓子類去決定實(shí)例化哪個(gè)類??梢岳斫獬?,用來(lái)生產(chǎn)同一等級(jí)結(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]); 
 
?>

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

?php

/** 
 * 抽象工廠模式 
 * */ 
 
interface userProperties { 
 function getUsername(); 
 function getGender(); 
 function getJob(); 
} 
 
interface createUser { //將對(duì)象的創(chuàng)建抽象成一個(gè)接口 
 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]); 
?>

如有錯(cuò)誤,請(qǐng)指正。

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

您可能感興趣的文章:
  • 學(xué)習(xí)php設(shè)計(jì)模式 php實(shí)現(xiàn)裝飾器模式(decorator)
  • PHP簡(jiǎn)單裝飾器模式實(shí)現(xiàn)與用法示例
  • PHP、Python和Javascript的裝飾器模式對(duì)比
  • PHP設(shè)計(jì)模式之注冊(cè)樹(shù)模式分析
  • php簡(jiǎn)單實(shí)現(xiàn)單態(tài)設(shè)計(jì)模式的方法分析
  • 輕松掌握php設(shè)計(jì)模式之訪問(wèn)者模式
  • PHP常用的三種設(shè)計(jì)模式匯總
  • PHP設(shè)計(jì)模式之迭代器模式
  • PHP設(shè)計(jì)模式之觀察者模式實(shí)例
  • php設(shè)計(jì)模式之委托模式
  • PHP常用設(shè)計(jì)模式之委托設(shè)計(jì)模式
  • PHP設(shè)計(jì)模式之裝飾器模式實(shí)例詳解

標(biāo)簽:駐馬店 阜陽(yáng) 黑河 臨夏 延邊 南昌 欽州 中衛(wèi)

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《PHP設(shè)計(jì)模式之工廠模式詳解》,本文關(guān)鍵詞  PHP,設(shè)計(jì)模式,之,工廠,模式,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《PHP設(shè)計(jì)模式之工廠模式詳解》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于PHP設(shè)計(jì)模式之工廠模式詳解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    峡江县| 宾川县| 崇文区| 普安县| 陕西省| 普格县| 卢氏县| 九江市| 阿城市| 永年县| 陵川县| 台中县| 赤壁市| 台前县| 滦平县| 江口县| 军事| 新泰市| 阳曲县| 麻栗坡县| 临颍县| 朝阳县| 桃江县| 印江| 尼玛县| 墨江| 城固县| 栾城县| 东乡族自治县| 新泰市| 肥西县| 象山县| 上栗县| 河南省| 徐水县| 温宿县| 临夏市| 新密市| 南汇区| 和静县| 嵊泗县|