瞭解
工廠模式,工廠方法或者類生成物件,而不是在程式碼中直接new。
使用工廠模式,可以避免當改變某個類的名字或者方法之後,在呼叫這個類的所有的程式碼中都修改它的名字或者引數,只需要在工廠類裡修改需要new的類名即可。如果我們不使用工廠方式例項化這些類,則需要每一個類都需要new一遍,過程不可控,類多了,到處都是new的身影引進工廠模式,通過工廠統一建立物件例項。
程式碼
簡單案例①
<?php
//需要new的類
class Test1{
static function test(){
echo __FILE__;
}
}
<?php
//工廠類
class Factory{
/*
* 如果某個類在很多的檔案中都new ClassName(),那麼萬一這個類的名字
* 發生變更或者引數發生變化,如果不使用工廠模式,就需要修改每一個PHP
* 程式碼,使用了工廠模式之後,只需要修改工廠類或者方法就可以了。
*/
static function createDatabase(){
$test = new Test1();
return $test;
}
}
<?php
//呼叫的程式碼程式
spl_autoload_register('autoload1');
$test = Factory::createDatabase();
$test->test();
function autoload1($class){
$dir = __DIR__;
$requireFile = $dir."\\".$class.".php";
require $requireFile;
}
簡單案例②
<?php
//工廠模式 提供獲取某個物件例項的一個介面,同時使呼叫程式碼避免確定例項化基類的步驟
//字串類
class String {
public function write() {}
}
//Json類
class Json {
public function getJsonData() {}
}
//xml類
class Xml {
public function buildXml() {}
}
//工廠類
class Factory {
public static function create($class) {
return new $class;
}
}
Factory::create("Json"); //獲取Json物件