Home arrow PHP arrow Page 2 - Object Interaction and Mediator Classes in PHP 5

Expanding the initial mediator class - PHP

Are you looking for an approachable guide on how to use the mediator design pattern in PHP 5? If you answered "yes," then you should take a look at this group of articles. Welcome to the final part of the series that began with “Introducing Mediator Classes in PHP 5.” This series takes you through building mediator classes with PHP, and shows you how to use this useful pattern with copious code samples.

TABLE OF CONTENTS:
  1. Object Interaction and Mediator Classes in PHP 5
  2. Expanding the initial mediator class
  3. Building some additional file handling classes
  4. Implementing the mediator pattern
By: Alejandro Gervasio
Rating: starstarstarstarstar / 5
March 20, 2007

print this article
SEARCH DEV SHED

TOOLS YOU CAN USE

advertisement

As you'll surely recall, in the preceding article of this series I defined a mediator class, which was called "FileHandlerMediator." The purpose of creating this class was to demonstrate the capacity of a mediator structure for synchronizing two different objects.

In this specific case, the objects were conceived as simple file handlers for manipulating numeric and alphabetic data respectively. Nevertheless, I stated in the previous section that my objective was to expand the initial functionality of this file handler mediator class so it could maintain three (not only two) objects in perfect synchronization.

Even though this sounds like a hard thing to accomplish, it's much simpler than you may think. Let me show you the improved signature of this mediator class, this time including the required modifications that allow it to synchronize three different file handlers.

That being said, the definition for this class is as follows:     

// define 'FileHandlerMediator' class
class FileHandlerMediator{
   private $numericFileHandler;
   private $alphabeticFileHandler;
   private $alphanumericFileHandler;
   public function __construct
($numericData,$alphabeticData,$alphanumericData){
     $this->numericFileHandler=new NumericFileHandler
($numericData,$this);
     $this->alphabeticFileHandler=new AlphabeticFileHandler
($alphabeticData,$this);
     $this->alphanumericFileHandler=new AlphanumericFileHandler
($alphanumericData,$this);
   }
   public function getNumericFileHandler(){
     return $this->numericFileHandler;
   }
   public function getAlphabeticFileHandler(){
     return $this->alphabeticFileHandler;
   }
   public function getAlphanumericFileHandler(){
     return $this->alphanumericFileHandler;
   }
   // this method lowercase and uppercase respectively the data of the other file handlers
   public function modifyFileData(FileHandler $fileHandler){
     if($fileHandler instanceof NumericFileHandler){
       if($fileHandler->getStatus()=='uppercased'){
         if($this->getAlphabeticFileHandler()->getStatus()!
='uppercased'){
           $this->getAlphabeticFileHandler()-
>uppercaseFileData();
         }
         if($this->getAlphanumericFileHandler()->getStatus
()!='uppercased'){
           $this->getAlphanumericFileHandler()-
>uppercaseFileData();
         }
       }
       elseif($fileHandler->getStatus()=='lowercased'){
         if($this->getAlphabeticFileHandler()->getStatus()!
='lowercased'){
           $this->getAlphabeticFileHandler()-
>lowercaseFileData();
         }
         if($this->getAlphanumericFileHandler()->getStatus
()!='lowercased'){
           $this->getAlphanumericFileHandler()-
>lowercaseFileData();
         }
       }
     }
     elseif($fileHandler instanceof AlphabeticFileHandler){
       if($fileHandler->getStatus()=='uppercased'){
         if($this->getNumericFileHandler()->getStatus()!
='uppercased'){
           $this->getNumericFileHandler()-
>uppercaseFileData();
         }
         if($this->getAlphanumericFileHandler()->getStatus
()!='uppercased'){
           $this->getAlphanumericFileHandler()-
>uppercaseFileData();
         }
       }
       elseif($fileHandler->getStatus()=='lowercased'){
         if($this->getNumericFileHandler()->getStatus()!
='lowercased'){
           $this->getNumericFileHandler()-
>lowercaseFileData();
         }
         if($this->getAlphanumericFileHandler()->getStatus
()!='lowercased'){
           $this->getAlphanumericFileHandler()-
>lowercaseFileData();
         }
       }           
     }
     elseif($fileHandler instanceof AlphanumericFileHandler){
       if($fileHandler->getStatus()=='uppercased'){
         if($this->getAlphabeticFileHandler()->getStatus()!
='uppercased'){
           $this->getAlphabeticFileHandler()-
>uppercaseFileData();
         }
         if($this->getNumericFileHandler()->getStatus()!
='uppercased'){
           $this->getNumericFileHandler()-
>uppercaseFileData();
         }
       }
       elseif($fileHandler->getStatus()=='lowercased'){
         if($this->getAlphabeticFileHandler()->getStatus()!
='lowercased'){
           $this->getAlphabeticFileHandler()-
>lowercaseFileData();
         }
         if($this->getNumericFileHandler()->getStatus()!
='lowercased'){
           $this->getNumericFileHandler()-
>lowercaseFileData();
         }
       }           
     }                       
   }
}

I modified the structure of the previous mediator class to provide it with the capacity for synchronizing three different file handlers. In this case, these file handlers deal with numeric and alphabetic data, and alphanumeric values as well.

It's worth stressing here that each time a file handler object changes the case of the data that it manipulates, this variation is also introduced by the other handlers via the respective mediator. The "modifyFileData()" method, which has been coded above, demonstrates how this synchronization between objects is performed by a few simple PHP sentences.

At this stage, I illustrated in a friendly way how the structure of the mediator class that you learned before can be modified with the purpose of synchronizing three distinct file handlers. However, the signatures of these objects still remain undefined. In the upcoming section I'm going to show you their definitions. Please click on the link below and keep reading.



 
 
>>> More PHP Articles          >>> More By Alejandro Gervasio
 

blog comments powered by Disqus
escort Bursa Bursa escort Antalya eskort
   

PHP ARTICLES

- Hackers Compromise PHP Sites to Launch Attac...
- Red Hat, Zend Form OpenShift PaaS Alliance
- PHP IDE News
- BCD, Zend Extend PHP Partnership
- PHP FAQ Highlight
- PHP Creator Didn't Set Out to Create a Langu...
- PHP Trends Revealed in Zend Study
- PHP: Best Methods for Running Scheduled Jobs
- PHP Array Functions: array_change_key_case
- PHP array_combine Function
- PHP array_chunk Function
- PHP Closures as View Helpers: Lazy-Loading F...
- Using PHP Closures as View Helpers
- PHP File and Operating System Program Execut...
- PHP: Effects of Wrapping Code in Class Const...

Developer Shed Affiliates

 


Dev Shed Tutorial Topics: