Factory mode:The factory class determines which instance of the production class to create based on the parameters Factory class:A method class specifically used to create other objects. That is, allocate on demand, pass in parameters for selection, and return the specific class. Function: Encapsulates object creation and simplifies the operation of creating objects, that is, calling a method of the factory class to get the required class Supplement: 1. Main roles: abstract product (Product), concrete product (Concrete Product), abstract factory role (Creator) 2. Advantages and Disadvantages Advantages: The factory method pattern allows the system to introduce new products without modifying the factory role. Disadvantages: Customers may have to create a Creator subclass just to create a specific Concrete Product object 3. Applicability When a class does not know the objects it must create When a class wants its subclasses to specify the objects it creates When a class delegates the responsibility of creating objects to one of multiple helper subclasses and wants you to localize the information about which helper subclass is the delegate
<?php //对象 class MyObject{ public function __construct(){} public function test(){ return 'test'; } } //工厂 class MyFactory{ public static function factory(){ return new MyObject(); } } $myObject = MyFactory::factory(); echo $myObject->test(); ?>
<?php //抽象类 定义属性及抽象方法 abstract class Operation{ protected $_NumberA = 0; protected $_NumberB = 0; protected $_Result= 0; public function __construct($A,$B){ $this->_NumberA = $A; $this->_NumberB = $B; } public function setNumber($A,$B){ $this->_NumberA = $A; $this->_NumberB = $B; } public function clearResult(){ $this->_Result = 0; } abstract protected function getResult(); } //操作类 class OperationAdd extends Operation{ public function getResult(){ $this->_Result = $this->_NumbserA + $this->_NumberB; return $this->_Result; } } class OperationSub extends Operation{ public function getResult(){ $this->_Result = $this->_NumberA - $this->_NumberB; return $this->_Result; } } ………… //工厂类 class OperationFactory{ private static $obj; public static function CreationOperation($type,$A,$B){ switch($type){ case '+': self::$obj = new OperationAdd($A,$B); break; case '-': self::$obj = new OperationSub($A,$B); break; …… } } } //操作 $obj = OperationFactory:: CreationOperation('+',5,6); echo $obj-> getResult(); ?>