首页 > 后端开发 > php教程 > php面向对象开发之——原型模式

php面向对象开发之——原型模式

黄舟
发布: 2023-03-04 12:36:02
原创
1815 人浏览过

原型模式是抽象工厂模式/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);
?>
登录后复制

原型模式减少了代码量,而且在返回对象时,更是可以加入自定义的操作,十分的灵活方便。但要注意的是,原型模式使用了clone方法,请注意clone产生的浅复制问题,即,被clone的对象的属性中包含对象,那clone得到的将不是新的复本,而是相同的引用。

 以上就是php面向对象开发之——原型模式的内容,更多相关内容请关注PHP中文网(www.php.cn)!


来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板