ホームページ  >  記事  >  バックエンド開発  >  PHP オブジェクト指向開発 - プロトタイプ モード

PHP オブジェクト指向開発 - プロトタイプ モード

黄舟
黄舟オリジナル
2016-12-29 11:16:411649ブラウズ

プロトタイプ パターンは、抽象ファクトリ パターン/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 中国語 Web サイト (www.php.cn) をご覧ください。


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。