note 59310 added to language.oop5.abstract

From: Date: Fri, 02 Dec 2005 17:38:51 +0000
Subject: note 59310 added to language.oop5.abstract
Groups: php.notes 
Request: Send a blank email to php-notes+get-99465@lists.php.net to get a copy of this message
<?php // Design Pattern ABSTRACT FACTORY implementation // abstract class AbstractFactory { public abstract function CreateProductA(); // return data type is AbstractProductA public abstract function CreateProductB(); // return data type is AbstractProductB } // Abstract factory #1 // class ConcreteFactory1 extends AbstractFactory { public function CreateProductA() { // return data type is AbstractProductA return new ProductA1(); } public function CreateProductB() { // return data type is AbstractProductB return new ProductB1(); } } // Abstract factory #2 // class ConcreteFactory2 extends AbstractFactory { public function CreateProductA() { // return data type is AbstractProductA // return new ProductA2(); } public function CreateProductB() { // return data type is AbstractProductB // return new ProductB2(); } } // "AbstractProductA" // abstract class AbstractProductA { } // "AbstractProductB" // abstract class AbstractProductB { public abstract function Interact($a); // return type is void // // input type is AbstractProductA } // "ProductA1" // class ProductA1 extends AbstractProductA { } // "ProductB1" // class ProductB1 extends AbstractProductB { public function Interact($a) { echo __CLASS__." interacts with ".__METHOD__."\n"; var_dump($a); } } // "ProductA2" class ProductA2 extends AbstractProductA { } // "ProductB2" class ProductB2 extends AbstractProductB { public function Interact($a) { echo __CLASS__." interacts with ".__METHOD__."\n"; var_dump($a); } } class Client { private $AbstractProductA; // type AbstractProductA; private $AbstractProductB; // type AbstractProductB; // Constructor public function __construct($factory) { $this->AbstractProductB = $factory->CreateProductB(); $this->AbstractProductA = $factory->CreateProductA(); } public function Run() { $this->AbstractProductB->Interact($this->AbstractProductA); } } // Abstract factory #1 $factory1 = new ConcreteFactory1(); $c1 = new Client($factory1); $c1->Run(); // Abstract factory #2 $factory2 = new ConcreteFactory2(); $c2 = new Client($factory2); $c2->Run(); // TURGUT Z. YESILYURT, MS // Software Developer // NewJersey, USA ?> Output:: ProductB1 interacts with ProductB1::Interact object(ProductA1)#4 (0) { } ProductB2 interacts with ProductB2::Interact object(ProductA2)#8 (0) { } ---- Manual Page -- http://www.php.net/manual/en/language.oop5.abstract.php Edit -- http://master.php.net/manage/user-notes.php?action=edit+59310 Delete: added to the manual -- http://master.php.net/manage/user-notes.php?action=delete+59310&report=yes&reason=added+to+the+manual Delete: bad code -- http://master.php.net/manage/user-notes.php?action=delete+59310&report=yes&reason=bad+code Delete: spam -- http://master.php.net/manage/user-notes.php?action=delete+59310&report=yes&reason=spam Delete: useless -- http://master.php.net/manage/user-notes.php?action=delete+59310&report=yes&reason=useless Delete: non-english -- http://master.php.net/manage/user-notes.php?action=delete+59310&report=yes&reason=non-english Delete: already in docs -- http://master.php.net/manage/user-notes.php?action=delete+59310&report=yes&reason=already+in+docs Delete: other reasons -- http://master.php.net/manage/user-notes.php?action=delete+59310&report=yes Reject -- http://master.php.net/manage/user-notes.php?action=reject+59310&report=yes Search -- http://master.php.net/manage/user-notes.php

« previous php.notes (#99465) next »