标签:
<?php /** * 享元模式 * * 运用享元技术有效的支持大量细粒度的对象 */ class CD { private $_title = null; private $_artist = null; public function setTitle($title) { $this->_title = $title; } public function getTitle() { return $this->_title; } public function setArtist($artist) { $this->_artist = $artist; echo ‘打印参数传来的实例:‘.serialize($artist).‘<br>‘; } public function getArtist($artist) { return $this->_artist; } } class Artist { private $_name; public function __construct($name) { echo "正在实例化:".$name."<br/>"; $this->_name = $name; } public function getName() { return $this->_name; } } class ArtistFactory { private $_artists = array(); public function getArtist($name) { if(isset($this->_artists[$name]))//传过来的参数已经被实例化了,就返回参数对应的实例 { return $this->_artists[$name]; } else { $objArtist = new Artist($name);//实例化一个对象 $this->_artists[$name] = $objArtist;//这个主要记录传过来的参数已经被实例化 return $objArtist;//返回实例 } } } //这里享元模式的研究对象是Artist类 $objArtistFactory = new ArtistFactory(); $objCD1 = new CD(); $objCD1->setTitle("title1"); $objCD1->setArtist($objArtistFactory->getArtist(‘artist1‘)); $objCD2 = new CD(); $objCD2->setTitle("title2"); $objCD2->setArtist($objArtistFactory->getArtist(‘artist2‘)); $objCD3 = new CD(); $objCD3->setTitle("title3"); $objCD3->setArtist($objArtistFactory->getArtist(‘artist1‘));//这个artist1对象已经存在,所以“正在实例化”那句不会输出
标签:
原文地址:http://www.cnblogs.com/jiufen/p/5000554.html