¿ª·¢£¨php£©
»PHPÉè¼ÆÄ£Ê½Ö®¹¤³§Ä£Ê½¶¨ÒåÓëÓ÷¨Ïê½â
±¾ÎÄʵÀý½²ÊöÁphpÉè¼ÆÄ£Ê½Ö®¹¤³§Ä£Ê½¶¨ÒåÓëÓ÷¨¡£·ÖÏí¸ø´ó¼Ò¹©´ó¼Ò²Î¿¼£¬¾ßÌåÈçÏ£º
¹¤³§Ä£Ê½(Factory Design Pattern)×÷ΪһÖÖ´´½¨ÐÍÉè¼ÆÄ£Ê½, ×ñÑÁË¿ª·Å-·â±ÕÔÔò, ¶ÔÐ޸ķâ±Õ, ¶ÔÀ©Õ¹¿ª·Å. ¹¤³§·½·¨(Factory Method)ģʽ¾ÍÊÇÒª´´½¨"ijÖÖ¶«Î÷". ¶ÔÓÚ¹¤³§·½·¨Ä£Ê½, Òª´´½¨µÄ"¶«Î÷"ÊÇÒ»¸ö²úÆ·,Õâ¸ö²úÆ·Óë´´½¨ËüµÄÀàÖ®¼ä²»´æÔÚ°ó¶¨.ʵ¼ÊÉÏ,ΪÁ˱£³ÖÕâÖÖËÉñîºÏ,¿Í»§»áͨ¹ýÒ»¸ö¹¤³§·¢³öÇëÇó. ÔÙÓɹ¤³§´´½¨ËùÇëÇóµÄ²úÆ·.Ò²¿ÉÒÔ»»ÖÖ·½Ê½¿¼ÂÇ, ÀûÓù¤³§·½·¨Ä£Ê½, ÇëÇóÕßÖ»·¢³öÇëÇó, ¶ø²»¾ßÌå´´½¨²úÆ·.
¹¤³§µÄ¹¤×÷
ÏȽ¨Á¢Ò»¸ö¹¤³§µÄ½Ó¿Ú
Factory.php
<?phpabstract class Factory
{
//³éÏóµÄ´´½¨¶ÔÏóµÄ·½·¨
protected abstract function createProduct();
//¸Ã·½·¨µ÷ÓÃcreateProduct·½·¨·µ»ØÒ»¸ö²úÆ·¶ÔÏó.
public function start()
{
return $this->createProduct();
}
}
start·½·¨·µ»ØÒ»¸ö²úÆ·,¸Ã·½·¨µ÷ÓÃcreateProduct·½·¨Íê³É²úÉú²úÆ·µÄ²Ù×÷.ËùÒÔcreateProductµÄ¾ßÌåʵÏÖÒª¹¹½¨²¢·µ»ØÒ»¸ö°´Product½Ó¿ÚʵÏֵIJúÆ·¶ÔÏó.
±ÈÈç²úÆ·¶¼ÓÐÒ»¸ö¹²Í¬µÄ·½·¨getProperties(), ÒÔÏÂÊǶÔÓ¦Product½Ó¿Ú
Product.php
<?php//²úÆ·½Ó¿Ú
interface Product
{
public function getProperties();
}
½Ó×Å, ÎÒÃÇÒª½¨Á¢Á½¸ö¹¤³§,Îı¾¹¤³§TextFactoryºÍͼÏñ¹¤³§phptoFactory
TextFactory.php
<?phpinclude_once('Factory.php');
include_once('TextProduct.php');
class TextFactory extends Factory
{
protected function createProduct()
{
$product = new TextProduct();
return $product->getProperties();
}
}
PhotoFactory.php
<?phpinclude_once('Factory.php');
include_once('PhotoProduct.php');
class PhotoFactory extends Factory
{
protected function createProduct()
{
$product = new PhotoProduct();
return $product->getProperties();
}
}
¿ÉÒÔ¿´µ½,ÔÚ¹¤³§·½·¨µÄʵÏÖÖÐ, getProperties·½·¨ÒýÈëÁ˶à̬(polymorphism), ½«ÓÃÕâ¸ö·½·¨·µ»Ø"Îı¾"»ò"ͼÏñ". ͬһ¸ögetProperties()Óжà¸ö(poly)²»Í¬µÄÐÎ̬(morphs), Õâ¾ÍÊǶà̬.ÔÚÕâÖÖÇé¿öÏÂ, ÆäÖÐÒ»ÖÖÐÎʽ·µ»ØÎı¾, ¶øÁíÒ»ÖÖ·µ»ØÍ¼Ïñ.
¿ÉÒÔÔÚpropertiesÕâ¸öʵÏÖÖзÅÈëÄãÏëÒªµÄÈκζ«Î÷,¹¤³§·½·¨Éè¼Æ½«»á´´½¨Õâ¸ö¶ÔÏó, ²¢°ÑËû·µ»Ø¸øClientʹÓÃ.
ÏÂÃæµÄÊÇÁ½¸ö²úÆ·µÄʵÏÖ
TextProduct.php
<?phpinclude_once('Product.php');
class TextProduct implements Product
{
public function getProperties()
{
return "ÕâÀïÊÇÎı¾²úÆ·";
}
}
PhotoProduct.php
<?phpinclude_once('Product.php');
class PhotoProduct implements Product
{
//ÕâÊDzúÆ·¾ßÓеķ½·¨
public function getProperties()
{
return "ÕâÀïÊÇͼÏñ²úÆ·";
}
}
ÕâÁ½¸ö²úƷʵÏÖÁËProduct½Ó¿ÚÖеijéÏó·½·¨getProperties(),
¿Í»§(Client)
ÎÒÃDz¢²»Ï£Íû¿Í»§Ö±½Ó×ö³ö²úÆ·ÇëÇó.ʵ¼ÊÉÏ, ÎÒÃÇÏ£Íû¿Í»§Í¨¹ýFactory¹¤³§½Ó¿Ú×ö³öÇëÇó.ÕâÑùÒ»À´,Èç¹ûÒÔºóÎÒÃÇÔö¼ÓÁ˲úÆ·»òÕß¹¤³§, ¿Í»§¿ÉÒÔ×öͬÑùµÄÇëÇóÀ´µÃµ½¸ü¶àÀàÐ͵IJúÆ· , ¶ø²»»áÆÆ»µÕâ¸öÓ¦ÓÃ:
Client.php
<?phpinclude_once('PhotoFactory.php');
include_once('TextFactory.php');
class Client
{
public function __construct()
{
$this->somePhotoObject = new PhotoFactory();
echo $this->somePhotoObject->start() . '<br />';
$this->someTextObject = new TextFactory();
echo $this->someTextObject->start() . '<br />';
}
}
$worker = new Client();
ÔËÐÐClient.php, µÃµ½ÏÂÃæµÄ½á¹û
ÕâÀïÊÇͼÏñ²úÆ·ÕâÀïÊÇÎı¾²úÆ·
×¢Òâ: Client¶ÔÏó²¢Ã»ÓÐÏò²úÆ·Ö±½Ó×ö³öÇëÇó, ¶øÊÇͨ¹ý¹¤³§À´ÇëÇó. ÖØÒªµÄÊÇ, ¿Í»§²¢²»ÊµÏÖ²úÆ·ÌØÐÔ, ¶øÁô¸ø²úƷʵÏÖÀ´ÌåÏÖ.
µ÷Õû²úÆ·
Éè¼ÆÄ£Ê½µÄÕæÕý¼ÛÖµ²¢²»ÊÇÌá¸ß²Ù×÷µÄËÙ¶È, ¶øÊǼӿ쿪·¢µÄËÙ¶È.
Èç¹ûÏÖÔÚÐèÇó±ä»¯ÁË, ÐèÒª¶ÔͼÏñ²úÆ·×ö³öÐÞ¸Ä, Ö»ÐèÒªÐÞ¸ÄÏàÓ¦µÄ²úÆ·PhotoProductµÄgetProperties·½·¨¼´¿É
¶ÔÏóµÄ¸Ä±ä¿´ÆðÀ´ºÜ¼òµ¥ ²»¹ýProductµÄgetProperties()·½·¨ÈÔ±£³ÖÏàͬµÄ½Ó¿Ú,ÇëÇ󹤳§·µ»ØÒ»¸öÊôÐÔ¶ÔÏó
Ôö¼ÓвúÆ·ºÍ²ÎÊý»¯ÇëÇó
ÎÊÌâÀ´ÁË,Èç¹ûÒªÔö¼Ó¸ü¶àµÄͼÏñºÍÎı¾ËµÃ÷, ÓÐûÓбØÒªÃ¿´ÎÔö¼ÓÒ»¸öеÄÇøÓò¾ÍÔö¼ÓÒ»¸öеľßÌåµÄ¹¤³§Àà?ÕâÒâζ×ÅҪΪÿ¸öÐÂÇøÓòÔö¼ÓÒ»¸öй¤³§ºÍ²úÆ·.ÓÚÊÇ,ÎÒÃÇÒý½øÁ˲ÎÊý»¯¹¤³§Éè¼ÆÄ£Ê½
²ÎÊý»¯¹¤³§Éè¼ÆÄ£Ê½ºÍÒ»°ãµÄ¹¤³§Éè¼ÆÄ£Ê½µÄÖ÷񻂿±ðÖ®Ò»Êǿͻ§°üº¬¹¤³§ºÍ²úÆ·µÄÒýÓÃ. ÔÚ²ÎÊý»¯ÇëÇóÖÐ, ClientÀà±ØÐëÖ¸¶¨²úÆ·, ¶ø²»ÊDzúÆ·¹¤³§. createProduct()²Ù×÷ÖеIJÎÊýÊÇÓɿͻ§´«ÈëÒ»¸ö²úÆ·; ËùÒÔ¿Í»§±ØÐëÖ¸³öËüÏëÒªµÄ¾ßÌå²úÆ·. ²»¹ý, Õâ¸öÇëÇóÈÔÈ»ÊÇͨ¹ý¹¤³§½Ó¿ÚFactory·¢³öµÄ. ËùÒÔ, ¾¡¹Ü¿Í»§°üº¬Ò»¸ö²úÆ·ÒýÓÃ, µ«Í¨¹ýFactory, ¿Í»§ÈÔÈ»Óë²úÆ··ÖÀë.
Ò»¸ö¹¤³§¶à¸ö²úÆ·(²ÎÊý»¯¹¤³§·½·¨)
¶ÔÓÚ´ó¶àÊýÇëÇó, ²ÎÊý»¯¹¤³§·½·¨¸üΪ¼òµ¥, ÒòΪ¿Í»§Ö»ÐèÒª´¦ÀíÒ»¸ö¾ßÌ幤³§.¹¤³§·½·¨²Ù×÷ÓÐÒ»¸ö²ÎÊý,ָʾÐèÒª´´½¨µÄ²úÆ·.¶øÔÚÔÀ´µÄÉè¼ÆÖÐ, ÿ¸ö²úÆ·¶¼ÓÐ×Ô¼ºµÄ¹¤³§, ²»ÐèÒªÁí¸ö´«µÝ²ÎÊý; ²úƷʵÏÖÒÀÀµÓÚ¸÷¸ö²úÆ·ÌØ¶¨µÄ¹¤³§.
й¤³§½Ó¿Ú
Factory.php
<?phpabstract class Factory
{
//³éÏóµÄ´´½¨¶ÔÏóµÄ·½·¨
protected abstract function createProduct(Product $product);
//¸Ã·½·¨ÓÉfactoryMethod·½·¨·µ»ØÒ»¸ö²úÆ·¶ÔÏó.
public function start($product)
{
return $this->createProduct($product);
}
}
ÔÚÕâ¸öеÄFactory½Ó¿ÚÖпÉÒÔ¿´µ½, create()ºÍstart()¶¼ÐèÒªÒ»¸ö²ÎÊý,Ö¸¶¨Ò»¸öProduct¶ÔÏó, ¶ø²»ÊÇProduct½Ó¿ÚµÄÒ»¸öÌØ¶¨ÊµÏÖ, ËùÒÔ¿ÉÒÔ½ÓÊÜÈκÎProductµÄ¾ßÌåʵÀý.
¹¤³§¾ßÌåʵÏÖ
¾ßÌåµÄ´´½¨ÕßÀàCommonFactoryʵÏÖÁËcreateProduct(),ÈçÏÂ
CommonFactory.php
<?phpinclude_once('Factory.php');
include_once('Product.php');
class CommonFactory extends Factory
{
protected function createProduct(Product $product)
{
return $product->getProperties();
}
}
Õâ¸öÀàµ÷ÓÃProductµÄ·½·¨getProperties½«²úÆ··µ»Ø¸ø¿Í»§.
вúÆ·
¾ßÌå²úÆ·µÄ±ä»¯²¢²»»á¸Ä±äÔÀ´µÄProduct½Ó¿Ú,»¹ÊÇÔÀ´µÄ´úÂë
<?php//²úÆ·½Ó¿Ú
interface Product
{
public function getProperties();
}
ÀýÈç, ÏÖÔÚÓÐÒ»¸ö¸Ö±Ê²úÆ·PenProduct
PenProduct.php
<?phpinclude_once('Product.php');
class PenProduct implements Product
{
public function getProperties()
{
return "¸Ö±Ê²úÆ·";
}
}
¿Í»§Clent(ÓвÎÊý)
<?phpinclude_once('CommonFactory.php');
include_once('PenProduct.php');
class Client
{
public function __construct()
{
$commonFactory = new CommonFactory();
echo $commonFactory->start(new PenProduct());
}
}
$worker = new Client();
ÔËÐкóÊä³ö
¸Ö±Ê²úÆ·
ÒÔºóÈç¹û¿ª·¢³öÁËеIJúÆ·, Ö»ÐèÒª´´½¨¶ÔÓ¦µÄ²úÆ·Àà, È»ºó¿Í»§Ö¸¶¨ÏëÒªµÄвúÆ· , ¼´¿É·µ»Ø¿Í»§ÐèÒªµÄ²úÆ·.
×ܽá:
²úÆ·¸Ä±ä: ½Ó¿Ú²»±ä
ʹÓÃÉè¼ÆÄ£Ê½µÄÒ»´óºÃ´¦¾ÍÊÇ¿ÉÒÔºÜÈÝÒ׵ضÔÀà×ö³ö¸Ä±ä, ¶ø²»»áÆÆ»µ¸ü´óµÄ³ÌÐò. Ö®ËùÒÔÄܹ»ÈÝÒ×µØ×ö³ö¸Ä±ä, ÃØ¾÷ÔÚÓÚ±£³Ö½Ó¿Ú²»±ä, ¶øÖ»¸Ä±äÄÚÈÝ.
¸ü¶à¹ØÓÚPHPÏà¹ØÄÚÈݸÐÐËȤµÄ¶ÁÕ߿ɲ鿴±¾Õ¾×¨Ì⣺¡¶phpÃæÏò¶ÔÏó³ÌÐòÉè¼ÆÈëÃŽ̡̳·¡¢¡¶PHP»ù±¾Óï·¨ÈëÃŽ̡̳·¡¢¡¶PHPÊý×é(Array)²Ù×÷¼¼ÇÉ´óÈ«¡·¡¢¡¶php×Ö·û´®(string)Ó÷¨×ܽᡷ¡¢¡¶php+mysqlÊý¾Ý¿â²Ù×÷ÈëÃŽ̡̳·¼°¡¶php³£¼ûÊý¾Ý¿â²Ù×÷¼¼ÇÉ»ã×Ü¡·
Ï£Íû±¾ÎÄËùÊö¶Ô´ó¼ÒPHP³ÌÐòÉè¼ÆÓÐËù°ïÖú¡£
Äú¿ÉÄܸÐÐËȤµÄÎÄÕÂ:phpÉè¼ÆÄ£Ê½Ö®¼òµ¥¹¤³§Ä£Ê½Ïê½âPHP×î³£ÓõÄ2ÖÖÉè¼ÆÄ£Ê½¹¤³§Ä£Ê½ºÍµ¥Àýģʽ½éÉÜphpÉè¼ÆÄ£Ê½ Factory(¹¤³§Ä£Ê½)php»ù´¡Éè¼ÆÄ£Ê½´óÈ«(×¢²áÊ÷ģʽ¡¢¹¤³§Ä£Ê½¡¢µ¥ÁÐģʽ)»ùÓÚphpÉè¼ÆÄ£Ê½Öй¤³§Ä£Ê½Ïêϸ½éÉÜPHPÉè¼ÆÄ£Ê½Ö®¹¤³§Ä£Ê½Óëµ¥ÀýģʽPHPʵÏÖÉè¼ÆÄ£Ê½ÖеijéÏ󹤳§Ä£Ê½Ïê½âPHPÉè¼ÆÄ£Ê½Ö®ÔÐÍģʽ¶¨ÒåÓëÓ÷¨Ïê½âPHPÉè¼ÆÄ£Ê½Ö®ÊÊÅäÆ÷ģʽ¶¨ÒåÓëÓ÷¨Ïê½âPHPÉè¼ÆÄ£Ê½Ö®×°ÊÎÆ÷ģʽ¶¨ÒåÓëÓ÷¨Ïê½âPHPÉè¼ÆÄ£Ê½Ö®×´Ì¬Ä£Ê½¶¨ÒåÓëÓ÷¨Ïê½â
±¾ÎÄ¿ª·¢£¨php£©Ïà¹ØÊõÓï:php´úÂëÉ󼯹¤¾ß php¿ª·¢¹¤³Ìʦ ÒÆ¶¯¿ª·¢Õß´ó»á ÒÆ¶¯»¥ÁªÍø¿ª·¢ web¿ª·¢¹¤³Ìʦ Èí¼þ¿ª·¢Á÷³Ì Èí¼þ¿ª·¢¹¤³Ìʦ
±¾ÎıêÌ⣺PHPÉè¼ÆÄ£Ê½Ö®¹¤³§Ä£Ê½¶¨ÒåÓëÓ÷¨Ïê½â
±¾Õ¾Á´½Ó£ºhttp://www.codesec.net/view/574917.html
·ÖÏíÇëµã»÷£º
1.·²CodeSecTeam×ªÔØµÄÎÄÕÂ,¾ù³ö×ÔÆäËüýÌå»òÆäËû¹ÙÍø½éÉÜ,Ä¿µÄÔÚÓÚ´«µÝ¸ü¶àµÄÐÅÏ¢,²¢²»´ú±í±¾Õ¾ÔÞͬÆä¹ÛµãºÍÆäÕæÊµÐÔ¸ºÔð£»
2.×ªÔØµÄÎÄÕ½ö´ú±íÔ´´×÷Õß¹Ûµã,Óë±¾Õ¾Î޹ء£ÆäÔ´´ÐÔÒÔ¼°ÎÄÖгÂÊöÎÄ×ÖºÍÄÚÈÝδ¾±¾Õ¾Ö¤Êµ,±¾Õ¾¶Ô¸ÃÎÄÒÔ¼°ÆäÖÐÈ«²¿»òÕß²¿·ÖÄÚÈÝ¡¢ÎÄ×ÖµÄÕæÊµÐÔ¡¢ÍêÕûÐÔ¡¢¼°Ê±ÐÔ£¬²»×÷³öÈκα£Ö¤»ò³ÐÈô£»
3.Èç±¾Õ¾×ªÔØ¸åÉæ¼°°æÈ¨µÈÎÊÌâ,Çë×÷Õß¼°Ê±ÁªÏµ±¾Õ¾,ÎÒÃǻἰʱ´¦Àí¡£