1. Factory method mode. Defines an interface for creating objects, letting subclasses decide which class to instantiate. A factory method is an instantiation of a class that is deferred to its subclasses.
Factory method Pattern class structure diagram:
Realize:
<?php//Abstract Product Class abstract class abstractproduct{//Common method Public function common () {} public abstract function is Havior ();} Specific product classes Class ConcreteProduct1 extends abstractproduct{public function behavior () {echo ' doing what Product1 sho Uld do!\n "; }}class ConcreteProduct2 extends abstractproduct{public function behavior () {echo ' I just doing what product2 s Hould do!\n "; }}//Abstract Factory class abstract class Abstractcreator{public abstract function createproduct ($productname);} Specific factory classes Class Concretecreate extends abstractcreator{public function createproduct ($productname) {try{ $product = new Reflectionclass ($productname); $instance = $product->newinstanceargs (); $instance->behavior (); return $instance; }catch (Logicexception $e) {die ("Not gonna make it in here...\n"); }catch (Reflectionexception $e) {die ("Your class does not exist!\n"); }}}//scene Classes class client{ Public Function gene () {$creator = new concretecreate (); $product 1 = $creator->createproduct ("ConcreteProduct1"); $product 1->behavior (); $product 2 = $creator->createproduct ("ConcreteProduct2"); $product 2->behavior (); }}client::gene ();
2. Simple Factory mode. Also known as the Static factory methods (static Factory method) mode. A simple factory model is a factory object that determines which product class instances are created.
Simple Factory mode class structure diagram:
Implementation code, only minor modifications in the factory method mode.
<?php//Abstract Product Class abstract class abstractproduct{//Common method Public function common () {} public abstract function is Havior ();} Specific product classes Class ConcreteProduct1 extends abstractproduct{public function behavior () {echo ' doing what Product1 sho Uld do!\n "; }}class ConcreteProduct2 extends abstractproduct{public function behavior () {echo ' I just doing what product2 s Hould do!\n "; }}//Simple factory class simplecreator{public function createproduct ($productname) {try{$product = new Reflec Tionclass ($productname); $instance = $product->newinstanceargs (); $instance->behavior (); return $instance; }catch (Logicexception $e) {die ("Not gonna make it in here...\n"); }catch (Reflectionexception $e) {die ("Your class does not exist!\n"); }}}//scene classes class client{public function gene () {$creator = new simplecreator (); $product 1 = $creator->createproduct ("ConcretEProduct1 "); $product 1->behavior (); $product 2 = $creator->createproduct ("ConcreteProduct2"); $product 2->behavior (); }}client::gene ();
3. Abstract Factory mode. Provides an interface for creating a set of dependent or interdependent objects without specifying their specific classes.
PHP Code implementation:
<?php//Abstract Product Class Aabstract class abstractproducta{//Common method Public function common () {} public abstract function Behavior ();} Specific product class AClass ConcreteProductA1 extends abstractproducta{public function behavior () {echo ' doing what Product1 Should do!\n "; }}class ConcreteProductA2 extends abstractproducta{public function behavior () {echo ' I just doing what product2 Should do!\n "; }}//Abstract Product Class Babstract class abstractproductb{//Common method Public function common () {} public abstract function Bdosom Ething ();} Specific product class Bclass ConcreteProductB1 extends abstractproductb{public Function bdosomething () {echo "B .... 1!\n "; }}class ConcreteProductB2 extends abstractproductb{public Function bdosomething () {echo "B ... 2!\n "; }}//Abstract Factory class abstraction class Abstractcreator{public abstract function createproducta (); public abstract function CREATEPRODUCTB ();} Specific factory classes Class ConcreteCreator1 extends abstractcreator{public function CreateprOducta () {return (new ConcreteProductA1 ()); } public Function Createproductb () {return (new ConcreteProductB1 ()); }}class ConcreteCreator2 extends abstractcreator{public Function createproducta () {return (new Concreteprod UctA2 ()); } public Function Createproductb () {return (new ConcreteProductB2 ()); }}//scene Classes Class client{public function gene () {$creator 1 = new ConcreteCreator1 (); $productA 1 = $creator 1->createproducta (); $productB 1 = $creator 1->CREATEPRODUCTB (); $creator 2 = new ConcreteCreator2 (); $productA 2 = $creator 2->createproducta (); $productB 2 = $creator 2->CREATEPRODUCTB (); $productB 2->bdosomething (); }}client::gene ();
Factory Method Mode--Simple Factory mode--Abstract Factory mode