您的位置:首页 > 其它

享元模式很好的实例

2015-11-27 14:19 218 查看
参考资料:/article/1268858.html


<?php
/**
*享元模式
*
*运用享元技术有效的支持大量细粒度的对象
*/
classCD
{
private$_title=null;
private$_artist=null;
publicfunctionsetTitle($title)
{
$this->_title=$title;
}
publicfunctiongetTitle()
{
return$this->_title;
}
publicfunctionsetArtist($artist)
{
$this->_artist=$artist;
echo'打印参数传来的实例:'.serialize($artist).'<br>';
}
publicfunctiongetArtist($artist)
{
return$this->_artist;
}
}

classArtist
{
private$_name;
publicfunction__construct($name)
{
echo"正在实例化:".$name."<br/>";
$this->_name=$name;
}
publicfunctiongetName()
{
return$this->_name;
}
}

classArtistFactory
{
private$_artists=array();
publicfunctiongetArtist($name)
{
if(isset($this->_artists[$name]))//传过来的参数已经被实例化了,就返回参数对应的实例
{
return$this->_artists[$name];
}
else
{
$objArtist=newArtist($name);//实例化一个对象
$this->_artists[$name]=$objArtist;//这个主要记录传过来的参数已经被实例化
return$objArtist;//返回实例
}
}
}

//这里享元模式的研究对象是Artist类
$objArtistFactory=newArtistFactory();
$objCD1=newCD();
$objCD1->setTitle("title1");
$objCD1->setArtist($objArtistFactory->getArtist('artist1'));
$objCD2=newCD();
$objCD2->setTitle("title2");
$objCD2->setArtist($objArtistFactory->getArtist('artist2'));
$objCD3=newCD();
$objCD3->setTitle("title3");
$objCD3->setArtist($objArtistFactory->getArtist('artist1'));//这个artist1对象已经存在,所以“正在实例化”那句不会输出



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: