>  기사  >  백엔드 개발  >  PHP 객체 지향 개발 - 프로토타입 모드

PHP 객체 지향 개발 - 프로토타입 모드

黄舟
黄舟원래의
2016-12-29 11:16:411798검색

프로토타입 패턴은 추상 팩토리 패턴/content/10866786.html을 강력하게 변환한 것입니다. 간단히 말해서 추상 팩토리 패턴의 여러 팩토리 클래스를 객체 생성을 담당하는 중앙 제어 클래스로 결합합니다.

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

class carEngine implements engineNorms{

	public function engine(){
		return &#39;汽车引擎&#39;;
	}

}

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

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

class carBody implements bodyNorms{

	public function body(){
		return &#39;汽车车身&#39;;
	}

}

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

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

class carWhell implements whellNorms{

	public function whell(){
		return &#39;汽车轮子&#39;;
	}

}

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

//原型工厂
class factory{

	private $engineNorms;
	private $bodyNorms;
	private $whellNorms;
	
	public function __construct(engineNorms $engineNorms,bodyNorms $bodyNorms,whellNorms $whellNorms){
		$this->engineNorms=$engineNorms;
		$this->bodyNorms=$bodyNorms;
		$this->whellNorms=$whellNorms;
	}
	
	public function getEngineNorms(){
		return clone $this->engineNorms;
	}
	
	public function getBodyNorms(){
		return clone $this->bodyNorms;
	}
	
	public function getWhellNorms(){
		return clone $this->whellNorms;
	}

}
$carFactory=new factory(new carEngine(),new carBody(),new carWhell());
$car[&#39;engine&#39;]=$carFactory->getEngineNorms()->engine();
$car[&#39;body&#39;]=$carFactory->getBodyNorms()->body();
$car[&#39;whell&#39;]=$carFactory->getWhellNorms()->whell();
print_r($car);

$busFactory=new factory(new busEngine(),new busBody(),new busWhell());
$bus[&#39;engine&#39;]=$busFactory->getEngineNorms()->engine();
$bus[&#39;body&#39;]=$busFactory->getBodyNorms()->body();
$bus[&#39;whell&#39;]=$busFactory->getWhellNorms()->whell();
print_r($bus);
?>

프로토타입 모드는 코드 양을 줄이고, 객체를 반환할 때 사용자 정의 작업을 추가할 수 있어 매우 유연하고 편리합니다. 그러나 프로토타입 모드에서는 복제 방법을 사용한다는 점에 유의해야 합니다. 복제로 인해 발생하는 얕은 복사 문제에 주의하십시오. 즉, 복제된 객체의 속성에 객체가 포함되어 있으면 복제는 새로운 복사본을 얻지 못합니다. 같은 참조.

위 내용은 PHP 객체지향 개발-프로토타입 모드 내용입니다. 더 많은 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!


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