>  기사  >  백엔드 개발  >  PHP 객체 지향 개발 - 추상 팩토리 패턴

PHP 객체 지향 개발 - 추상 팩토리 패턴

黄舟
黄舟원래의
2017-03-18 10:49:292077검색

추상 팩토리 패턴팩토리 패턴을 추상화한 것으로, 일반인의 관점에서 보면 팩토리 패턴의 구조를 독립적으로 실행할 수 있는 개체로 분리합니다.

공장 모델을 예로 들어보겠습니다.

자동차와 버스를 생산하는 자동차 공장이 있습니다. 자동차와 버스는 엔진, 차체, 바퀴로 구성됩니다.

공장 모델에서는 자동차와 버스를 자동차 계열의 두 가지 범주로 간주합니다. 아래 그림과 같이 엔진, 차체 및 바퀴의 생산은 자동차 생산을 위한 고정 구조입니다. 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 객체 지향 개발 - 추상 팩토리 패턴실제 배포 is:

실제 배포:

//生产引擎的标准
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);

추상 팩토리 패턴은 팩토리 패턴을 추상화하므로 추상화된 새 구조를 더욱 유연하게 만들 수 있습니다. 예를 들어 차체 생산에 페인팅 작업이 필요한 경우 공장 모드에서는 전체 구조를 변경해야 하지만 추상 공장에서는 생산 본체만 변경하면 됩니다.

또한 추상 팩토리 패턴은 구조적 요구 사항이 높다는 단점도 있습니다. 전체 구조의 확장이나 간소화가 더욱 복잡해지기 때문에 추상 팩토리 패턴을 사용할 경우 계층 구조의 분할이 발생합니다. 매우 중요합니다.

위 내용은 PHP 객체지향 개발-추상 팩토리 패턴 내용입니다. 더 많은 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!

관련글 :

Java에서 추상 팩토리 패턴을 구현하는 구체적인 코드에 대한 자세한 설명

추상 팩토리 패턴 JAVA 디자인 패턴

PHP 단순 팩토리 패턴, 팩토리 메소드 패턴, 추상 팩토리 패턴 비교

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.