δ¼ÓÐDZê

PHPÉè¼ÆÄ£Ê½Ö®¹¤³§Ä£Ê½¶¨ÒåÓëÓ÷¨Ïê½â

×ÖÌå´óС ´ó | ÖÐ | С
[¿ª·¢£¨php£© ËùÊô·ÖÀà ¿ª·¢£¨php£© | ·¢²¼Õß µêС¶þ03 | ʱ¼ä | ×÷Õß ºìÁì½í ] 0ÈËÊղصã»÷ÊÕ²Ø

±¾ÎÄʵÀý½²ÊöÁphpÉè¼ÆÄ£Ê½Ö®¹¤³§Ä£Ê½¶¨ÒåÓëÓ÷¨¡£·ÖÏí¸ø´ó¼Ò¹©´ó¼Ò²Î¿¼£¬¾ßÌåÈçÏ£º

¹¤³§Ä£Ê½(Factory Design Pattern)×÷ΪһÖÖ´´½¨ÐÍÉè¼ÆÄ£Ê½, ×ñÑ­ÁË¿ª·Å-·â±ÕÔ­Ôò, ¶ÔÐ޸ķâ±Õ, ¶ÔÀ©Õ¹¿ª·Å. ¹¤³§·½·¨(Factory Method)ģʽ¾ÍÊÇÒª´´½¨"ijÖÖ¶«Î÷". ¶ÔÓÚ¹¤³§·½·¨Ä£Ê½, Òª´´½¨µÄ"¶«Î÷"ÊÇÒ»¸ö²úÆ·,Õâ¸ö²úÆ·Óë´´½¨ËüµÄÀàÖ®¼ä²»´æÔÚ°ó¶¨.ʵ¼ÊÉÏ,ΪÁ˱£³ÖÕâÖÖËÉñîºÏ,¿Í»§»áͨ¹ýÒ»¸ö¹¤³§·¢³öÇëÇó. ÔÙÓɹ¤³§´´½¨ËùÇëÇóµÄ²úÆ·.Ò²¿ÉÒÔ»»ÖÖ·½Ê½¿¼ÂÇ, ÀûÓù¤³§·½·¨Ä£Ê½, ÇëÇóÕßÖ»·¢³öÇëÇó, ¶ø²»¾ßÌå´´½¨²úÆ·.

¹¤³§µÄ¹¤×÷

ÏȽ¨Á¢Ò»¸ö¹¤³§µÄ½Ó¿Ú

Factory.php

<?php
abstract 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

<?php
include_once('Factory.php');
include_once('TextProduct.php');
class TextFactory extends Factory
{
protected function createProduct()
{
$product = new TextProduct();
return $product->getProperties();
}
}

PhotoFactory.php

<?php
include_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

<?php
include_once('Product.php');
class TextProduct implements Product
{
public function getProperties()
{
return "ÕâÀïÊÇÎı¾²úÆ·";
}
}

PhotoProduct.php

<?php
include_once('Product.php');
class PhotoProduct implements Product
{
//ÕâÊDzúÆ·¾ßÓеķ½·¨
public function getProperties()
{
return "ÕâÀïÊÇͼÏñ²úÆ·";
}
}

ÕâÁ½¸ö²úƷʵÏÖÁËProduct½Ó¿ÚÖеijéÏó·½·¨getProperties(),

¿Í»§(Client)

ÎÒÃDz¢²»Ï£Íû¿Í»§Ö±½Ó×ö³ö²úÆ·ÇëÇó.ʵ¼ÊÉÏ, ÎÒÃÇÏ£Íû¿Í»§Í¨¹ýFactory¹¤³§½Ó¿Ú×ö³öÇëÇó.ÕâÑùÒ»À´,Èç¹ûÒÔºóÎÒÃÇÔö¼ÓÁ˲úÆ·»òÕß¹¤³§, ¿Í»§¿ÉÒÔ×öͬÑùµÄÇëÇóÀ´µÃµ½¸ü¶àÀàÐ͵IJúÆ· , ¶ø²»»áÆÆ»µÕâ¸öÓ¦ÓÃ:

Client.php

<?php
include_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

<?php
abstract 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

<?php
include_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

<?php
include_once('Product.php');
class PenProduct implements Product
{
public function getProperties()
{
return "¸Ö±Ê²úÆ·";
}
}

¿Í»§Clent(ÓвÎÊý)

<?php
include_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¿ª·¢¹¤³Ìʦ Èí¼þ¿ª·¢Á÷³Ì Èí¼þ¿ª·¢¹¤³Ìʦ

tags: php,Product,¹¤³§,²úÆ·,ģʽ,Factory,getProperties,function,lt,gt,PHP,#63,once,createProduct,class
·ÖÒ³£º12
×ªÔØÇë×¢Ã÷
±¾ÎıêÌ⣺PHPÉè¼ÆÄ£Ê½Ö®¹¤³§Ä£Ê½¶¨ÒåÓëÓ÷¨Ïê½â
±¾Õ¾Á´½Ó£ºhttp://www.codesec.net/view/574917.html
·ÖÏíÇëµã»÷£º


1.·²CodeSecTeam×ªÔØµÄÎÄÕÂ,¾ù³ö×ÔÆäËüýÌå»òÆäËû¹ÙÍø½éÉÜ,Ä¿µÄÔÚÓÚ´«µÝ¸ü¶àµÄÐÅÏ¢,²¢²»´ú±í±¾Õ¾ÔÞͬÆä¹ÛµãºÍÆäÕæÊµÐÔ¸ºÔð£»
2.×ªÔØµÄÎÄÕ½ö´ú±íÔ­´´×÷Õß¹Ûµã,Óë±¾Õ¾Î޹ء£ÆäÔ­´´ÐÔÒÔ¼°ÎÄÖгÂÊöÎÄ×ÖºÍÄÚÈÝδ¾­±¾Õ¾Ö¤Êµ,±¾Õ¾¶Ô¸ÃÎÄÒÔ¼°ÆäÖÐÈ«²¿»òÕß²¿·ÖÄÚÈÝ¡¢ÎÄ×ÖµÄÕæÊµÐÔ¡¢ÍêÕûÐÔ¡¢¼°Ê±ÐÔ£¬²»×÷³öÈκα£Ö¤»ò³ÐÈô£»
3.Èç±¾Õ¾×ªÔØ¸åÉæ¼°°æÈ¨µÈÎÊÌâ,Çë×÷Õß¼°Ê±ÁªÏµ±¾Õ¾,ÎÒÃǻἰʱ´¦Àí¡£
µÇ¼ºó¿ÉÓµÓÐÊÕ²ØÎÄÕ¡¢¹Ø×¢×÷ÕßµÈȨÏÞ...
¼¼Êõ´óÀà ¼¼Êõ´óÀà | ¿ª·¢£¨php£© | ÆÀÂÛ(0) | ÔĶÁ(13)