首頁 >後端開發 >php教程 >php 設計模式之工廠模式詳解

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

怪我咯
怪我咯原創
2017-07-12 14:07:111237瀏覽

php設計模式總結-工廠模式

使用工廠模式的目的或目標?

工廠模式的最大優點在於創建物件上面,就是把創建物件的過程封裝起來,這樣隨時可以產生一個新的物件。
減少程式碼進行複製黏帖,耦合關係重,牽一發動其他部分程式碼。

通俗的說,以前建立一個物件要使用new,現在把這個過程封裝起來了。
假設不使用工廠模式:那麼很多地方呼叫類別a,程式碼就會這樣子建立一個實例:new a(),假設某天需要把a類別的名稱修改,代表很多呼叫的程式碼都要修改。

工廠模式的優點就在創建物件上。
工廠模式的優點就在創建物件上。建立一個工廠(一個函數或一個類別方法)來製造新的物件,它的任務就是把物件的創建過程都封裝起來,
創建物件不是使用new的形式了。而是定義一個方法,用來建立物件實例。

這篇文章主要介紹了PHP設計模式之工廠模式與單例模式,簡單介紹的工廠模式與單例模式的功能,並結合實例形式分析了工廠模式及單例模式的實現與應用,需要的朋友可以參考下,具體如下:

工廠模式:應對需求創建相應的物件

class factory{
  function construct($name){
    if(file_exists('./'.$name.'.class.php')){
      return new $name;
    }else{
      die('not exist');
    }
  }
}

單例模式:建立一個物件的實例,不允許再建立實例,節約資源(例如資料庫的連線)

class instance{
  public $val = 10;
  private static $instance ;
  private function construct(){}
  private function clone(){}
  //设置为静态方法才可被类调用
  public static function getInstance(){
    /*if(!isset(self::$instance)){
      self::$instance = new self;
    }*/
    if(!isset(instance::$instance)){
      instance::$instance = new self;
    }
    return instance::$instance;
  }
}
$obj_one = instance::getInstance();
$obj_one->val = 20;
//clone可以调用clone()克隆即new出一个新的的对象
//$obj_two = clone $obj_one;
$obj_two = instance::getInstance();
echo $obj_two->val;
echo &#39;<p>&#39;;
var_dump($obj_one,$obj_two);

執行結果如下:

20
object(instance)[1]
 public &#39;val&#39; => int 20
object(instance)[1]
 public &#39;val&#39; => int 20

應用程式:資料庫連線類別(database access oject)

class mysqldb{
  private $arr = array(
    &#39;port&#39; => 3306,
    &#39;host&#39; => &#39;localhost&#39;,
    &#39;username&#39; => &#39;root&#39;,
    &#39;passward&#39; => &#39;root&#39;,
    &#39;dbname&#39; => &#39;instance&#39;,
    &#39;charset&#39; => &#39;utf8&#39;
     );
  private $link;
  static $instance;
  private function clone(){}
  private function construct(){
    $this->link = mysql_connect($this->arr[&#39;host&#39;],$this->arr[&#39;username&#39;],$this->arr[&#39;passward&#39;]) or die(mysql_error());
    mysql_select_db($this->arr[&#39;dbname&#39;]) or die(&#39;db error&#39;);
    mysql_set_charset($this->arr[&#39;charset&#39;]);
  }
  static public function getInsance(){
    if(!isset(mysqldb::$instance)){
      mysqldb::$instance = new self;
    }
    return mysqldb::$instance;
  }
  public function query($sql){
    if($res = mysql_query($sql)){
      return $res;
    }return false;
  }
  //fetch one
  public function get_one($sql){
    $res = $this->query($sql);
    if($result = mysql_fetch_row($res)){
      return $result[0];
    }
  }
  //fetch row
  public function get_row($sql){
    $res = $this->query($sql);
    if($result = mysql_fetch_assoc($res)){
      return $result;
    }
    return false;
  }
  //fetch all
  public function get_all($sql){
    $res = $this->query($sql);
    $arr = array();
    while($result = mysql_fetch_assoc($res)){
      $arr[] = $result;
    }
    return $arr;
  }
}
$mysql = mysqldb::getInsance();

以上是php 設計模式之工廠模式詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn