Maison > développement back-end > tutoriel php > Développement orienté objet PHP - modèle de fabrique abstraite

Développement orienté objet PHP - modèle de fabrique abstraite

黄舟
Libérer: 2023-03-04 12:34:01
original
2155 Les gens l'ont consulté

Le

Abstract Factory Pattern est une abstraction du Factory Pattern En termes simples, il sépare la structure du Factory Pattern en individus qui peuvent fonctionner de manière indépendante.

Prenons un exemple du modèle d'usine :

Il existe maintenant une usine automobile qui produit des voitures et des bus. Les voitures et les bus sont composés de moteurs, de carrosseries et de roues.

Dans le modèle d'usine, nous considérons les voitures et les bus comme deux catégories de la famille automobile. La production de moteurs, de carrosseries et de roues sont les structures fixes pour la production de voitures, comme le montre la figure ci-dessous : Développement orienté objet PHP - modèle de fabrique abstraite

Dans le modèle d'usine abstrait, le moteur de production, la carrosserie et les roues sont abstraits séparément, comme le montre la figure ci-dessous :

Développement orienté objet PHP - modèle de fabrique abstraite

Le déploiement réel est :

//生产引擎的标准
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 '巴士车轮子';
	}
	
}
Copier après la connexion

Continuez à faire abstraction de l'usine, faites abstraction de l'usine automobile et de l'usine de bus, et associez chaque usine à chaque composant, comme le montre la figure :

Développement orienté objet PHP - modèle de fabrique abstraiteLe déploiement réel est :

Le déploiement réel est :

//生产引擎的标准
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);
Copier après la connexion

Le modèle d'usine abstrait abstrait le modèle d'usine, ce qui peut rendre la nouvelle structure abstraite plus flexible. Par exemple, si la production d'une carrosserie de voiture nécessite une action de peinture, en mode usine, nous devons changer la structure globale, mais dans l'usine abstraite, il suffit de changer la carrosserie de production.

Le modèle d'usine abstrait présente également l'inconvénient que le modèle d'usine a des exigences structurelles élevées. L'expansion ou la rationalisation de la structure globale deviendra plus compliquée, donc lors de l'utilisation du modèle d'usine abstrait, la division de la structure hiérarchique. est très important.

Ce qui précède est le contenu du développement orienté objet PHP - modèle d'usine abstrait. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (m.sbmmt.com) !

Articles connexes :

Explication détaillée du code spécifique pour implémenter le modèle d'usine abstraite en Java

Modèle d'usine abstraite du modèle de conception JAVA

Comparaison du modèle d'usine simple PHP, du modèle de méthode d'usine et du modèle d'usine abstrait

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal