php簡單工廠模式例子(php工廠模式使用場景)

本文目錄一覽:

什麼是PHP中的工廠設計模式

工廠模式分為三種:簡單工廠、工廠方法、抽象工廠 ,三種工廠的區別是,抽象工廠由多條產品線,而工廠方法只有一條產品線,是抽象工廠的簡化。而工廠方法和簡單工廠相對,大家初看起來好像工廠方法增加了許多代碼但是實現的功能和簡單工廠一樣。但本質是,簡單工廠並未嚴格遵循設計模式的開閉原則,當需要增加新產品時也需要修改工廠代碼。但是工廠方法則嚴格遵守開閉原則,模式只負責抽象工廠接口,具體工廠交給客戶去擴展。在分工時,核心工程師負責抽象工廠和抽象產品的定義,業務工程師負責具體工廠和具體產品的實現。只要抽象層設計的好,框架就是非常穩定的。

PHP工廠模式怎樣將數據庫的結果集實例化

其實設計模式真的是一套解決方案而已,所以千萬不要對設計模式進行不理解的死記硬背,一定要理解為什麼要用這種設計模式,它一般實際應用在項目哪裡,如果你不這樣做,永遠都不會理解設計模式的奧妙之處。為了可以清晰的了解到什麼是簡單工廠模式,簡單工廠模式應用在哪裡。我們首先從具體實例開始講起。

一、問題的出現。

平時大家在一些開源的cms中,經常會碰到切換數據庫鏈接方式或者切換數據庫類型的例子,例如你可以選擇mysql的,mysqli,pdo的。或者oracle的。每切換一次,就意味着需要生成所選擇的數據庫的鏈接對象。那麼我們如何去實現這樣的對象生成和切換呢?

並且在代碼中,我只希望,我傳一個mysql,然後就可以使用mysql這個類對象,傳一個pdo,就可以pdo這個類對象,如下:

$db_object=db_factory::get_instance(‘pdo’);//這裡你想換哪個數據庫,就填哪個,例如mysql,mysqli,pdo

二、如何解決

這個時候簡單工廠這種方法就可以發揮作用了。

那麼我們可以創建一個工廠類,為什麼叫工廠,因為工廠是用來生產產品的,而這些產品就是對象。所以有下面對應關係

數據庫工廠===》db_factory類

各個數據庫鏈接對象=====》在db_factory中生產出來的對象,注意不是生產db_factory類的對象。

這個裡可能比較難理解,db_factory類中工廠是通過switch來切換獲取對象的。在下面給出的代碼中請慢慢理解

三、概念

簡單工廠模式:用於產生對象(進行對象切換)的方法,既然叫簡單,那麼肯定還有其他複雜點的工廠模式,例如抽象工廠模式,工廠方法模式。

四、如何實現單利模式。

算法:

1、建立一個工廠類,實例化這個工廠類後用這個類的其中一個方法獲取所需的數據庫鏈接對象

2、在工廠類中建立一個getDbObject的方法用於獲取數據庫鏈接對象。

3、在getDbObject方法中,傳入一個數據庫鏈接類型的參數,通過switch來切換類型,根據類型返回不同的數據庫鏈接對象

五、代碼實現:

下面對象中既使用了單利模式也使用了簡單工廠模式

?php

002

003 /**************db_factory.class.php****************/

004 class db_factory{

005 static private $instance=null;

006

007

008 private function __construct(){

009

010 }

011

012 static public function get_instance($db_type=’mysql’){

013 if(self::$instance==null){

014 self::$instance=new self();

015 }

016 $db_factory=self::$instance;

017 return $db_factory-getDbObject($db_type);

018 }

019

020 protected function getDbObject($db_type){

021 switch($db_type){

022 case ‘mysql’:

023 $obj=getMysql::get_instance();

024 break;

025 case ‘mysqli’:

026 $obj=getMysqli::get_instance();

027 break;

028 case ‘pdo’:

029 $obj=getPdo::get_instance();

030 break;

031 default :

032 $obj=getMysql::get_instance();

033 }

034 return $obj;

035 }

036 }

037

038 /**************getMysql.class.php****************/

039 class getMysql{

040 static private $instance=null;

041

042 private function __construct(){

043 }

044

045 static public function get_instance(){

046 if(self::$instance==null){

047 self::$instance=new self();

048 }

049 return self::$instance;

050 }

051

052 function select(){

053 echo ‘mysql獲取數據’;

054 }

055 }

056

057 /**************getMysqli.class.php****************/

058 class getMysqli{

059 static private $instance=null;

060

061 private function __construct(){

062 }

063

064 static public function get_instance(){

065 if(self::$instance==null){

066 self::$instance=new self();

067 }

068 return self::$instance;

069 }

070

071 function select(){

072 echo ‘mysqli獲取數據’;

073 }

074 }

075

076 /**************getPdo.class.php****************/

077 class getPdo{

078 static private $instance=null;

079

080 private function __construct(){

081 }

082

083 static public function get_instance(){

084 if(self::$instance==null){

085 self::$instance=new self();

086 }

087 return self::$instance;

088 }

089

090 function select(){

091 echo ‘pdo獲取數據’;

092 }

093 }

094

095

096

097

098

099

100

101 /**************客戶端調用****************/

102 $db_object=db_factory::get_instance(‘pdo’);//這裡你想換哪個數據庫,就填哪個,例如mysql,mysqli,pdo

103 $db_object-select();

104

105

106

107 ?

五、應用:在需要到對象的切換時可以考慮這種模式,但是對象的切換數最好不要超過10,多了之後這種方法的弊端就會顯現,會變得很累贅。

php設計模式: 請寫出工廠模式和單態模式的PHP5示例代碼

Example #1 調用工廠方法(帶參數)

?php

class Example

{

// The parameterized factory method

public static function factory($type)

{

if (include_once ‘Drivers/’ . $type . ‘.php’) {

$classname = ‘Driver_’ . $type;

return new $classname;

} else {

throw new Exception (‘Driver not found’);

}

}

}

?

————————————

Example #2 單例模式

?php

class Example

{

// 保存類實例在此屬性中

private static $instance;

// 構造方法聲明為private,防止直接創建對象

private function __construct()

{

echo ‘I am constructed’;

}

// singleton 方法

public static function singleton()

{

if (!isset(self::$instance)) {

$c = __CLASS__;

self::$instance = new $c;

}

return self::$instance;

}

// Example類中的普通方法

public function bark()

{

echo ‘Woof!’;

}

// 阻止用戶複製對象實例

public function __clone()

{

trigger_error(‘Clone is not allowed.’, E_USER_ERROR);

}

}

?

誰能解釋一下PHP的工廠模式?

工廠模式是程序設計模式的一種。

一般是在某個基礎類上創建一個靜態方法,根據參數來生成某個子類。這個方法,稱為工廠方法。

類比到現實,就像一個工廠,包含幾種產品,會根據客戶的訂單需求生產出指定的產品供客戶使用。

最簡單的用法:

class Pizza{

    public $price;

    

    public static function factory($type)

    {

        if($type==’veget’){

            return new VegetPizza();

        }elseif($type==’fruit’){

            return new FruitPizza();

        }

    }

}

class VegetPizze extends Pizza{

}

class FruitPizze extends Pizza{

}

大概邏輯是這樣的,具體實現上有好幾種寫法,你可以搜索設計模式深入了解一五

php設計模式之簡單工廠模式~呢?

這個問題有些模糊 我在多個點解釋下1.運行環境 .NET 是微軟的產品 理論上只能在windows 下運行 跨平台很差 PHP 可以再 Windows 和 Linux 上運行 跨平台很好2.學習成本 PHP 弱類型語言(鬆散型),簡單,容易上手 .NET 我最早是做.NET 的 .NET 學習成本較高 時間較長3.運行效率 這個仁者見仁智者見智 主要看開發人員的水平了。不過現在 很多網站 都使用 PHP MYSQL Apache 的組合來開發 因為成本低就是這樣的了,建議你還去後盾人學習一下,那裡都是專家手把手教你

PHP怎麼實現工廠模式?

?php

/**

* 單例模式和工廠模式

*

* 保證一個類僅有一個實例,並提供一個訪問它的全局訪問點

*

*/

class Singleton

{

static private $_instance = null;

private function __construct()

{

}

static public function getInstance($class=”)

{

if(empty($class)){

if(is_null(self::$_instance)) {

self::$_instance = new Singleton();

}

return self::$_instance;

}else{

static $class_object=array();

if(empty($class_object[$class])){

include dirname(__FILE__).’/includes/classes/’.$class.’.class.php’;

$class_object[$class]=new $class();

}

return $class_object[$class];

}

}

public function display()

{

echo “it is a singlton class function”;

}

}

// $obj = new Singleton(); // 聲明不能成功

$obj = Singleton::getInstance();

var_dump($obj);

$obj-display();

$obj1 = Singleton::getInstance();

var_dump(($obj === $obj1));

原創文章,作者:CZSL,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/144732.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
CZSL的頭像CZSL
上一篇 2024-10-26 11:51
下一篇 2024-10-26 11:51

相關推薦

  • Unity3D 創建沒有 Terrain Tile 的場景

    這篇文章將會介紹如何在 Unity3D 中創建一個沒有 Terrain Tile 的場景,同時也讓讀者了解如何通過編程實現這個功能。 一、基礎概念 在 Unity3D 中,Terr…

    編程 2025-04-29
  • Python強制轉型的實現方法和應用場景

    本文主要介紹Python強制轉型的實現方法和應用場景。Python強制轉型,也叫類型轉換,是指將一種數據類型轉換為另一種數據類型。在Python中,強制轉型主要通過類型構造函數、轉…

    編程 2025-04-29
  • Python計數循環例子用法介紹

    在這篇文章中,我們將為您提供有關Python計數循環的一些詳細信息,並為您提供示例和代碼,讓您更深入地了解如何使用Python進行計數循環。 一、什麼是計數循環? 計數循環是編程中…

    編程 2025-04-28
  • 手機安全模式怎麼解除?

    安全模式是一種手機自身的保護模式,它會禁用第三方應用程序並使用僅限基本系統功能。但有時候,安全模式會使你無法使用手機上的一些重要功能。如果你想解除手機安全模式,可以嘗試以下方法: …

    編程 2025-04-28
  • Qt State Machine與狀態機模式

    本文將介紹Qt State Machine和狀態機模式在Qt中的實現。Qt提供了QStateMachine和QState兩個類,可以方便地實現狀態機模式,並且能有效地處理複雜的、多…

    編程 2025-04-27
  • Access執行按鈕的實現方法及應用場景

    本文將詳細介紹Access執行按鈕的實現方法及其在實際應用場景中的使用方法。 一、創建Access執行按鈕的方法 在Access中,創建執行按鈕的方法非常簡單。只需要按照以下步驟進…

    編程 2025-04-27
  • 顯示C++設計模式

    本文將詳細介紹顯示C++設計模式的概念、類型、優點和代碼實現。 一、概念 C++設計模式是在軟件設計階段定義,用於處理常見問題的可重用解決方案。這些解決方案是經過測試和驗證的,並已…

    編程 2025-04-27
  • 用Python繪製櫻花飄落場景

    本文介紹如何用Python繪製一個帶有櫻花飄落特效的場景,通過本文的學習,您將了解到如何使用Python的turtle庫來繪製圖形,以及如何運用數學和物理知識來實現櫻花的飄落效果。…

    編程 2025-04-27
  • Centos7進入單用戶模式的解釋

    本文將介紹如何在Centos7中進入單用戶模式,並從以下幾個方面進行詳細的闡述。 一、Centos7進入單用戶模式的解答 在Centos7中進入單用戶模式需要執行以下步驟: 1. …

    編程 2025-04-27
  • 谷歌內核瀏覽器的特點及應用場景

    一、基礎特點 谷歌內核瀏覽器是指以谷歌瀏覽器內核( Blink )為基礎的瀏覽器,目前國內比較著名的應該是360瀏覽器、QQ瀏覽器、搜狗瀏覽器等。谷歌內核瀏覽器以快速、高效、穩定為…

    編程 2025-04-25

發表回復

登錄後才能評論