Abstraktes Fabrikmuster ist eine Abstraktion des Fabrikmusters Laienhaft ausgedrückt unterteilt es die Struktur des Fabrikmusters in einzelne Personen, die unabhängig voneinander ausgeführt werden können.
Nehmen wir ein Beispiel aus dem Fabrikmodell:
Jetzt gibt es eine Autofabrik, die Autos und Busse aus Motoren, Karosserien und Rädern herstellt.
Im Fabrikmodell betrachten wir Autos und Busse als zwei Kategorien in der Automobilfamilie. Die Produktion von Motoren, Karosserien und Rädern sind die festen Strukturen für die Produktion von Autos, wie in der folgenden Abbildung dargestellt:
Im abstrakten Fabrikmodell werden der Produktionsmotor, die Karosserie und die Räder separat abstrahiert, wie in der folgenden Abbildung dargestellt:
Die tatsächliche Bereitstellung ist:
//生产引擎的标准 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 '巴士车轮子'; } }
Abstrahieren Sie weiterhin die Fabrik, abstrahieren Sie die Autofabrik und die Busfabrik und verknüpfen Sie jede Fabrik mit jeder Komponente, wie in der Abbildung gezeigt:
Die tatsächliche Bereitstellung ist:
Die tatsächliche Bereitstellung ist:
//生产引擎的标准 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);
Das abstrakte Fabrikmuster abstrahiert das Fabrikmuster, wodurch die abstrahierte neue Struktur flexibler werden kann. Wenn beispielsweise die Produktion einer Autokarosserie einen Lackiervorgang erfordert, müssen wir im Fabrikmodus die Gesamtstruktur ändern, in der abstrakten Fabrik müssen wir jedoch nur die Produktionskarosserie ändern.
Das abstrakte Fabrikmuster hat auch den Nachteil, dass das Fabrikmuster hohe strukturelle Anforderungen stellt. Die Erweiterung oder Straffung der Gesamtstruktur wird komplizierter, sodass bei Verwendung des abstrakten Fabrikmusters die Aufteilung der hierarchischen Struktur erfolgt ist sehr wichtig.
Das Obige ist der Inhalt der objektorientierten PHP-Entwicklung – abstraktes Fabrikmuster. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (m.sbmmt.com).
Verwandte Artikel: