added abstract factory and factory pattern

This commit is contained in:
Dominik Liebler
2011-08-21 16:03:10 +02:00
parent 9569c1e693
commit afb62569d3
5 changed files with 155 additions and 0 deletions

View File

@@ -0,0 +1,40 @@
<?php
namespace DesignPatterns;
/**
* Abstract Factory pattern
*
* Purpose:
* to create series of related or dependant objects without specifying their concrete classes,
* usually created classes would all implement the same interface
*
* Examples:
* - A Factory to create media in a CMS: classes would be text, audio, video, picture
* - SQL Factory (types are all strings with SQL, but they vary in detail (tables, fields, etc.))
* - Zend Framework: Zend_Form::createElement() creates form elements, but you could also call new TextElement() or so
*
*/
abstract class AbstractFactory
{
/**
* @static
* @param string $content
* @return AbstractFactory\Text
*/
public static function createText($content)
{
return new AbstractFactory\Text($content);
}
/**
* @static
* @param string $path
* @param string $name
* @return AbstractFactory\Picture
*/
public static function createPicture($path, $name = '')
{
return new AbstractFactory\Picture($path, $name);
}
}

15
AbstractFactory/Media.php Normal file
View File

@@ -0,0 +1,15 @@
<?php
/**
* Created by JetBrains PhpStorm.
* User: dominik
* Date: 21.08.11
* Time: 15:47
* To change this template use File | Settings | File Templates.
*/
namespace DesignPatterns\AbstractFactory;
interface Media
{
}

View File

@@ -0,0 +1,27 @@
<?php
/**
* Created by JetBrains PhpStorm.
* User: dominik
* Date: 21.08.11
* Time: 15:42
* To change this template use File | Settings | File Templates.
*/
namespace DesignPatterns\AbstractFactory;
class Picture implements Media
{
protected $_path;
protected $_name;
/**
*
* @param string $path
* @param string $name
*/
public function __construct($path, $name = '')
{
$this->_name = (string) $name;
$this->_path = (string) $path;
}
}

24
AbstractFactory/Text.php Normal file
View File

@@ -0,0 +1,24 @@
<?php
/**
* Created by JetBrains PhpStorm.
* User: dominik
* Date: 21.08.11
* Time: 15:42
* To change this template use File | Settings | File Templates.
*/
namespace DesignPatterns\AbstractFactory;
class Text implements Media
{
/**
*
* @var string
*/
protected $_text;
public function __construct($text)
{
$this->_text = $text;
}
}