mirror of
https://github.com/DesignPatternsPHP/DesignPatternsPHP.git
synced 2025-02-24 01:32:22 +01:00
more real example
This commit is contained in:
parent
2830e7d1be
commit
9278f295b0
@ -1,41 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace DesignPatterns;
|
||||
|
||||
/**
|
||||
* adapter pattern
|
||||
*
|
||||
* Purpose:
|
||||
* to link two systems, that have different interfaces. An adapter defines interfaces that are equal for all linked
|
||||
* systems and wrap functionality
|
||||
*
|
||||
* Examples:
|
||||
* - different databases have the same interface to communicate although the underlying systems act differently
|
||||
*
|
||||
* this is a VERY basic example which won't work at all!
|
||||
*/
|
||||
interface DatabaseAdapter
|
||||
{
|
||||
public function getTables();
|
||||
}
|
||||
|
||||
class MySQL implements DatabaseAdapter
|
||||
{
|
||||
/**
|
||||
* The Adapter need to wrap the Adaptee in the constructor
|
||||
* much like Decorator does. Nothing is adapted here...
|
||||
*/
|
||||
public function getTables()
|
||||
{
|
||||
return $this->select('SHOW TABLES');
|
||||
}
|
||||
}
|
||||
|
||||
class SQLite implements DatabaseAdapter
|
||||
{
|
||||
public function getTables()
|
||||
{
|
||||
return system('sqlite --list-tables');
|
||||
}
|
||||
}
|
||||
|
25
Adapter/Book.php
Normal file
25
Adapter/Book.php
Normal file
@ -0,0 +1,25 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* DesignPatternPHP
|
||||
*/
|
||||
|
||||
namespace DesignPatterns\Adapter;
|
||||
|
||||
/**
|
||||
* Book is a concrete and standard paper book
|
||||
*/
|
||||
class Book implements PaperBookInterface
|
||||
{
|
||||
|
||||
public function open()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public function turnPage()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
}
|
41
Adapter/ElecBookAdapter.php
Normal file
41
Adapter/ElecBookAdapter.php
Normal file
@ -0,0 +1,41 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* DesignPatternPHP
|
||||
*/
|
||||
|
||||
namespace DesignPatterns\Adapter;
|
||||
|
||||
/**
|
||||
* ElecBookAdapter is an adapter to fit an e-book like a paper book
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
class ElecBookAdapter implements PaperBookInterface
|
||||
{
|
||||
|
||||
protected $eBook;
|
||||
|
||||
/**
|
||||
* Notice the constructor, it "wraps" an electronic book
|
||||
*/
|
||||
public function __construct(ElecBookInterface $ebook)
|
||||
{
|
||||
$this->eBook = $ebook;
|
||||
}
|
||||
|
||||
/**
|
||||
* This cass makes the proper translation from one interface to another
|
||||
*/
|
||||
public function open()
|
||||
{
|
||||
$this->eBook->pressStart();
|
||||
}
|
||||
|
||||
public function turnPage()
|
||||
{
|
||||
$this->eBook->pressNext();
|
||||
}
|
||||
|
||||
}
|
18
Adapter/ElecBookInterface.php
Normal file
18
Adapter/ElecBookInterface.php
Normal file
@ -0,0 +1,18 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* DesignPatternPHP
|
||||
*/
|
||||
|
||||
namespace DesignPatterns\Adapter;
|
||||
|
||||
/**
|
||||
* ElecBookInterface is a contract for an electronic book
|
||||
*/
|
||||
interface ElecBookInterface
|
||||
{
|
||||
|
||||
function pressNext();
|
||||
|
||||
function pressStart();
|
||||
}
|
27
Adapter/Kindle.php
Normal file
27
Adapter/Kindle.php
Normal file
@ -0,0 +1,27 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* DesignPatternPHP
|
||||
*/
|
||||
|
||||
namespace DesignPatterns\Adapter;
|
||||
|
||||
/**
|
||||
* Kindle is a concrete electronic book
|
||||
*
|
||||
* @author flo
|
||||
*/
|
||||
class Kindle implements ElecBookInterface
|
||||
{
|
||||
|
||||
public function pressNext()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public function pressStart()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
}
|
18
Adapter/PaperBookInterface.php
Normal file
18
Adapter/PaperBookInterface.php
Normal file
@ -0,0 +1,18 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* DesignPatternPHP
|
||||
*/
|
||||
|
||||
namespace DesignPatterns\Adapter;
|
||||
|
||||
/**
|
||||
* PaperBookInterface is a contract for a book
|
||||
*/
|
||||
interface PaperBookInterface
|
||||
{
|
||||
|
||||
function turnPage();
|
||||
|
||||
function open();
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user