首頁 > 後端開發 > php教程 > php物件導向開發之-抽象工廠模式

php物件導向開發之-抽象工廠模式

黄舟
發布: 2023-03-04 12:34:01
原創
2155 人瀏覽過

抽象工廠模式是對工廠模式的抽象,通俗來說,就是把工廠模式的結構分離出來成為能獨立運作的個體。

還是拿工廠模式中的例子來說明:

現在有一個汽車工廠,它生產小汽車和巴士車,小汽車和巴士車都是由引擎、車身和輪子組成的。

在工廠模式中,我們把小汽車和巴士車作為汽車族群中的兩個類別,生產引擎、車身和輪子為生產汽車的固定結構,如下圖所示:php物件導向開發之-抽象工廠模式

在抽象工廠模式中,把生產引擎、車身和輪子分別抽像出來,如下圖所示:

php物件導向開發之-抽象工廠模式

實際部署為:

//生产引擎的标准
interface engineNorms{
	function engine();
}

class carEngine implements engineNorms{

	public function engine(){
		return '汽车引擎';
	}

}

class busEngine implements engineNorms{
	
	public function engine(){
		return '巴士车引擎';
	}
	
}

//生产车身的标准
interface bodyNorms{
	function body();
}

class carBody implements bodyNorms{

	public function body(){
		return '汽车车身';
	}

}

class busBody implements bodyNorms{
	
	public function body(){
		return '巴士车车身';
	}
	
}

//生产车轮的标准
interface whellNorms{
	function whell();
}

class carWhell implements whellNorms{

	public function whell(){
		return '汽车轮子';
	}

}

class busWhell implements whellNorms{
	
	public function whell(){
		return '巴士车轮子';
	}
	
}
登入後複製

再繼續對工廠進行抽象,抽象汽車工廠和巴士車工廠,並且讓各工廠與各組件相關聯,如圖:

php物件導向開發之-抽象工廠模式實際部署為:

實際部署為:

//生产引擎的标准
interface engineNorms{
	function engine();
}

class carEngine implements engineNorms{

	public function engine(){
		return '汽车引擎';
	}

}

class busEngine implements engineNorms{
	
	public function engine(){
		return '巴士车引擎';
	}
	
}

//生产车身的标准
interface bodyNorms{
	function body();
}

class carBody implements bodyNorms{

	public function body(){
		return '汽车车身';
	}

}

class busBody implements bodyNorms{
	
	public function body(){
		return '巴士车车身';
	}
	
}

//生产车轮的标准
interface whellNorms{
	function whell();
}

class carWhell implements whellNorms{

	public function whell(){
		return '汽车轮子';
	}

}

class busWhell implements whellNorms{
	
	public function whell(){
		return '巴士车轮子';
	}
	
}

//工厂标准
interface factory {
static public function getInstance($type);
}

//汽车工厂
class carFactory implements factory{

static public function getInstance($type){
$instance='';
switch($type){
case 'engine':
$instance=new carEngine();
break;
case 'body':
$instance=new carBody();
break;
case 'whell':
$instance=new carWhell();
break;
default:
throw new Exception('汽车工厂无法生产这种产品');
}
return $instance;
}

}

//巴士车工厂
class busFactory implements factory{

static public function getInstance($type){
$instance='';
switch($type){
case 'engine':
$instance=new busEngine();
break;
case 'body':
$instance=new busBody();
break;
case 'whell':
$instance=new busWhell();
break;
default:
throw new Exception('巴士车工厂无法生产这种产品');
}
return $instance;
}

}

$car['engine']=carFactory::getInstance('engine')->engine();
$car['body']=carFactory::getInstance('body')->body();
$car['whell']=carFactory::getInstance('whell')->whell();
print_r($car);

$bus['engine']=busFactory::getInstance('engine')->engine();
$bus['body']=busFactory::getInstance('body')->body();
$bus['whell']=busFactory::getInstance('whell')->whell();
print_r($bus);
登入後複製

抽象工廠模式將工廠模式進行抽象,可以使得抽像出來的新結構更加的靈活。例如,若生產車身需要一個噴漆的動作,在工廠模式中,我們需要對整體結構進行更改,而抽象工廠中,只需要對生產車身進行更改就ok了。

抽象工廠模式同樣具有工廠模式對結構要求高的缺點,整體結構的擴展或精簡將變得更加的煩雜,所以使用抽象工廠模式時,對等級結構的劃分是非常重要的。

 以上就是php物件導向開發之-抽象工廠模式的內容,更多相關內容請關注PHP中文網(m.sbmmt.com)!

相關文章:

Java 實作抽象工廠模式的具體程式碼詳解

JAVA設計模式之抽象工廠模式

PHPJAVA設計模式方法和簡單工廠模式

🎜
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板