Factory Method Mode--Simple Factory mode--Abstract Factory mode

Source: Internet
Author: User

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-&GT;CREATEPRODUCTB ();        $creator 2 = new ConcreteCreator2 ();        $productA 2 = $creator 2->createproducta ();        $productB 2 = $creator 2-&GT;CREATEPRODUCTB ();    $productB 2->bdosomething (); }}client::gene ();

  

Factory Method Mode--Simple Factory mode--Abstract Factory mode

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.