cs AbstractFactory

This commit is contained in:
Dominik Liebler
2013-09-09 10:39:41 +02:00
parent 8c520c39c3
commit 3b7eb295c8
15 changed files with 39 additions and 52 deletions

View File

@@ -28,6 +28,7 @@ abstract class AbstractFactory
* Creates a text component * Creates a text component
* *
* @param string $content * @param string $content
*
* @return Text * @return Text
*/ */
abstract public function createText($content); abstract public function createText($content);
@@ -37,6 +38,7 @@ abstract class AbstractFactory
* *
* @param string $path * @param string $path
* @param string $name * @param string $name
*
* @return Picture * @return Picture
*/ */
abstract public function createPicture($path, $name = ''); abstract public function createPicture($path, $name = '');

View File

@@ -11,7 +11,6 @@ use DesignPatterns\AbstractFactory\Picture as BasePicture;
*/ */
class Picture extends BasePicture class Picture extends BasePicture
{ {
/** /**
* some crude rendering from HTML output * some crude rendering from HTML output
* *
@@ -19,7 +18,6 @@ class Picture extends BasePicture
*/ */
public function render() public function render()
{ {
return sprintf('<img src="%s" title="$s"/>', $this->_path, $this->_name); return sprintf('<img src="%s" title="$s"/>', $this->path, $this->name);
} }
} }

View File

@@ -11,7 +11,6 @@ use DesignPatterns\AbstractFactory\Text as BaseText;
*/ */
class Text extends BaseText class Text extends BaseText
{ {
/** /**
* some crude rendering from HTML output * some crude rendering from HTML output
* *
@@ -19,7 +18,6 @@ class Text extends BaseText
*/ */
public function render() public function render()
{ {
return '<div>' . htmlspecialchars($this->_text) . '</div>'; return '<div>' . htmlspecialchars($this->text) . '</div>';
} }
} }

View File

@@ -9,12 +9,12 @@ namespace DesignPatterns\AbstractFactory;
*/ */
class HtmlFactory extends AbstractFactory class HtmlFactory extends AbstractFactory
{ {
/** /**
* Creates a picture component * Creates a picture component
* *
* @param string $path * @param string $path
* @param string $name * @param string $name
*
* @return Html\Picture|Picture * @return Html\Picture|Picture
*/ */
public function createPicture($path, $name = '') public function createPicture($path, $name = '')
@@ -26,11 +26,11 @@ class HtmlFactory extends AbstractFactory
* Creates a text component * Creates a text component
* *
* @param string $content * @param string $content
*
* @return Html\Text|Text * @return Html\Text|Text
*/ */
public function createText($content) public function createText($content)
{ {
return new Html\Text($content); return new Html\Text($content);
} }
} }

View File

@@ -11,7 +11,6 @@ use DesignPatterns\AbstractFactory\Picture as BasePicture;
*/ */
class Picture extends BasePicture class Picture extends BasePicture
{ {
/** /**
* some crude rendering from JSON output * some crude rendering from JSON output
* *
@@ -19,7 +18,6 @@ class Picture extends BasePicture
*/ */
public function render() public function render()
{ {
return json_encode(array('title' => $this->_name, 'path' => $this->_path)); return json_encode(array('title' => $this->name, 'path' => $this->path));
} }
} }

View File

@@ -11,7 +11,6 @@ use DesignPatterns\AbstractFactory\Text as BaseText;
*/ */
class Text extends BaseText class Text extends BaseText
{ {
/** /**
* some crude rendering from JSON output * some crude rendering from JSON output
* *
@@ -19,7 +18,6 @@ class Text extends BaseText
*/ */
public function render() public function render()
{ {
return json_encode(array('content' => $this->_text)); return json_encode(array('content' => $this->text));
} }
} }

View File

@@ -16,6 +16,7 @@ class JsonFactory extends AbstractFactory
* *
* @param string $path * @param string $path
* @param string $name * @param string $name
*
* @return Json\Picture|Picture * @return Json\Picture|Picture
*/ */
public function createPicture($path, $name = '') public function createPicture($path, $name = '')
@@ -23,16 +24,15 @@ class JsonFactory extends AbstractFactory
return new Json\Picture($path, $name); return new Json\Picture($path, $name);
} }
/** /**
* Creates a text component * Creates a text component
* *
* @param string $content * @param string $content
*
* @return Json\Text|Text * @return Json\Text|Text
*/ */
public function createText($content) public function createText($content)
{ {
return new Json\Text($content); return new Json\Text($content);
} }
} }

View File

@@ -3,12 +3,12 @@
namespace DesignPatterns\AbstractFactory; namespace DesignPatterns\AbstractFactory;
/** /**
* Interface Media * Interface MediaInterface
* *
* This contract is not part of the pattern, in general case, each component * This contract is not part of the pattern, in general case, each component
* are not related * are not related
*/ */
interface Media interface MediaInterface
{ {
/** /**

View File

@@ -5,7 +5,7 @@ namespace DesignPatterns\AbstractFactory;
/** /**
* Class Picture * Class Picture
*/ */
abstract class Picture implements Media abstract class Picture implements MediaInterface
{ {
/** /**

View File

@@ -5,7 +5,7 @@ namespace DesignPatterns\AbstractFactory;
/** /**
* Class Text * Class Text
*/ */
abstract class Text implements Media abstract class Text implements MediaInterface
{ {
/** /**
* @var string * @var string

View File

@@ -7,20 +7,22 @@
namespace DesignPatterns\Adapter; namespace DesignPatterns\Adapter;
/** /**
* ElecBookAdapter is an adapter to fit an e-book like a paper book * EBookAdapter is an adapter to fit an e-book like a paper book
* *
* This is the adapter here. Notice it implemennts PaperBookInterface, * This is the adapter here. Notice it implemennts PaperBookInterface,
* therefore you don't have to change the code of the client which using paper book. * therefore you don't have to change the code of the client which using paper book.
*/ */
class ElecBookAdapter implements PaperBookInterface class EBookAdapter implements PaperBookInterface
{ {
protected $eBook; protected $eBook;
/** /**
* Notice the constructor, it "wraps" an electronic book * Notice the constructor, it "wraps" an electronic book
*
* @param EBookInterface $ebook
*/ */
public function __construct(ElecBookInterface $ebook) public function __construct(EBookInterface $ebook)
{ {
$this->eBook = $ebook; $this->eBook = $ebook;
} }
@@ -33,9 +35,11 @@ class ElecBookAdapter implements PaperBookInterface
$this->eBook->pressStart(); $this->eBook->pressStart();
} }
/**
* turns pages
*/
public function turnPage() public function turnPage()
{ {
$this->eBook->pressNext(); $this->eBook->pressNext();
} }
}
}

View File

@@ -0,0 +1,14 @@
<?php
namespace DesignPatterns\Adapter;
/**
* EBookInterface is a contract for an electronic book
*/
interface EBookInterface
{
function pressNext();
function pressStart();
}

View File

@@ -1,18 +0,0 @@
<?php
/*
* DesignPatternPHP
*/
namespace DesignPatterns\Adapter;
/**
* ElecBookInterface is a contract for an electronic book
*/
interface ElecBookInterface
{
function pressNext();
function pressStart();
}

View File

@@ -25,7 +25,6 @@ namespace DesignPatterns\Command;
*/ */
interface Command interface Command
{ {
/** /**
* this is the most important method in the Command pattern, * this is the most important method in the Command pattern,
* The Receiver goes in the constructor. * The Receiver goes in the constructor.

View File

@@ -1,9 +1,5 @@
<?php <?php
/*
* DesignPatternPHP
*/
namespace DesignPatterns\Tests\AbstractFactory; namespace DesignPatterns\Tests\AbstractFactory;
use DesignPatterns\AbstractFactory\AbstractFactory; use DesignPatterns\AbstractFactory\AbstractFactory;
@@ -15,7 +11,6 @@ use DesignPatterns\AbstractFactory\JsonFactory;
*/ */
class AbstractFactoryTest extends \PHPUnit_Framework_TestCase class AbstractFactoryTest extends \PHPUnit_Framework_TestCase
{ {
public function getFactories() public function getFactories()
{ {
return array( return array(
@@ -39,12 +34,11 @@ class AbstractFactoryTest extends \PHPUnit_Framework_TestCase
$factory->createText('footnotes') $factory->createText('footnotes')
); );
$this->assertContainsOnly('DesignPatterns\AbstractFactory\Media', $article); $this->assertContainsOnly('DesignPatterns\AbstractFactory\MediaInterface', $article);
/* this is the time to look at the Builder pattern. This pattern /* this is the time to look at the Builder pattern. This pattern
* helps you to create complex object like that article above with * helps you to create complex object like that article above with
* a given Abstract Factory * a given Abstract Factory
*/ */
} }
} }