Home>Article>Backend Development> PHP design pattern: factory pattern
Factory pattern:
The factory class determines which instance of the product class to create based on the parameters;
The factory class refers to a class that contains a method specifically used to create other objects. The so-called on-demand allocation is to pass in parameters for selection and return a specific class. The main function of the factory pattern is to encapsulate object creation and simplify object creation operations.
Simply put, it is to call a method of the factory class (pass in parameters) to get the required class;
Code implementation:
Example 1 (the most basic factory class):
test();
Example 2:
_NumberA = $A; $this->_NumberB = $B; } public function setNumber($A,$B){ $this->_NumberA = $A; $this->_NumberB = $B; } /1* protected function clearResult(){ $this->_Result = 0; } */ public function clearResult(){ $this->_Result = 0; } //抽象方法无方法体 abstract protected function getResult(); } //继承一个抽象类的时候,子类必须实现抽象类中的所有抽象方法; //另外,这些方法的可见性 必须和抽象类中一样(或者更为宽松) class OperationAdd extends Operation { public function getResult(){ $this->_Result=$this->_NumberA + $this->_NumberB; return $this->_Result; } } class OperationSub extends Operation { public function getResult(){ $this->_Result=$this->_NumberA - $this->_NumberB; return $this->_Result; } } class OperationMul extends Operation { public function getResult(){ $this->_Result=$this->_NumberA * $this->_NumberB; return $this->_Result; } } class OperationDiv extends Operation { public function getResult(){ $this->_Result=$this->_NumberA / $this->_NumberB; return $this->_Result; } } class OperationFactory { //创建保存实例的静态成员变量 private static $obj; //创建访问实例的公共的静态方法 public static function CreateOperation($type,$A,$B){ switch($type){ case '+': self::$obj = new OperationAdd($A,$B); break; case '-': self::$obj = new OperationSub($A,$B); break; case '*': self::$obj = new OperationMul($A,$B); break; case '/': self::$obj = new OperationDiv($A,$B); break; } return self::$obj; } } //$obj = OperationFactory::CreateOperation('+'); //$obj->setNumber(4,4); $obj = OperationFactory::CreateOperation('*',5,6); echo $obj->getResult(); /1* echo '
'; $obj->clearResult(); echo '
'; echo $obj->_Result; */
Example 3:
getFactory('Silver'); //让白银工厂制造一个推荐商品 $product = $factory->create('Commendatory'); //得到白银会员的推荐商品 echo $product->desc.'
'; //获得一个青铜工厂 $factory2 = CenterFactory::getFactory2('Bronze'); //让青铜工厂制造一个打折商品 $product2 = $factory2->create('Rebate'); //得到青铜会员的推荐商品 echo $product2->desc;
Example 4:
_file = $file; $this->_parse(); } private function _parse(){ //完成PNG格式的解析工作 //并填充$_width,$_height和$_data $this->_data = getimagesize($this->_file); list($this->_width,$this->_height)=$this->_data; } public function getWidth(){ return $this->_width; } public function getHeight(){ return $this->_height; } public function getData(){ return $this->_data; } } class Image_JPEG implements IImage { protected $_width,$_height,$_data; public function __construct($file){ $this->_file = $file; $this->_parse(); } private function _parse(){ //完成JPEG格式的解析工作 //并填充$_width,$_height和$_data //$this->_width = imagesx($this->_file); //$this->_height = imagesy($this->_file); $this->_data = getimagesize($this->_file); list($this->_width,$this->_height)=$this->_data; } public function getWidth(){ return $this->_width; } public function getHeight(){ return $this->_height; } public function getData(){ return $this->_data; } } //工厂类 class ImageFactory { public static function factory($file){ $filename = pathinfo($file); switch(strtolower($filename['extension'])){ case 'jpg': $return = new Image_JPEG($file); break; case 'png': $return = new Image_PNG($file); break; default: echo '图片类型不正确'; break; } if($return instanceof IImage){ return $return; }else{ echo '出错了'; exit(); } } } $image = ImageFactory::factory('images/11.jpg'); var_dump($image->getWidth()); echo '
'; print_r($image->getheight()); echo '
'; print_r($image->getData());
For more PHP design patterns: factory pattern related articles, please pay attention to the PHP Chinese website!